Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1103 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  sql : selectall_hashref (sans connaitre le nom des colonnes)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

sql : selectall_hashref (sans connaitre le nom des colonnes)

n°2001229
MisterBark
be aware
Posté le 13-06-2010 à 02:08:05  profilanswer
 

Salut ! :)
 
voila mon probleme :
 
my $sqlres = $sqlh->selectall_hashref("SELECT * FROM table", "name" );
 
Ensuite, je peux récupérer mes colonnes par des :
$sqlres -> {robert} -> {col}
 
Mais voila, comment je fais pour récupérer toutes les colonnes de robert sans connaitre leur nom à l'avance ?
 
Mon but serait de me créer un hash dont le contenu ressemblerait à ca :
<i>(sans doute grace à l'imbrication de 2 foreach)</i>
 
(
"robert col1", "...",
"robert col2", "...",
"robert col3", "...",
"marcel col1", "...",
"marcel col2", "...",
etc.
)
 
 
MERCI BEAUCOUP PAR AVANCE ! :D


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
mood
Publicité
Posté le 13-06-2010 à 02:08:05  profilanswer
 

n°2001236
gilou
Modérateur
Modzilla
Posté le 13-06-2010 à 09:01:45  profilanswer
 

Si je comprends bien, $sqlres est une référence sur un hash, et vous cherchez les valeurs des clés de ce hash.
Il va donc d'abord déréférencer pour obtenir le hash: %{$sqlres}, puis obtenir la liste des clés: keys %{$sqlres}
Si la valeur du hash associé à une clé est aussi une référence sur un hash (ce que la double flèche dans $sqlres -> {robert} -> {col} suggère), on utilise la même technique. Une utilisation de Data::Dumper peut permettre de voir quelle est la structure de données exacte de $sqlres, pour la mise au point.
A+,


Message édité par gilou le 13-06-2010 à 09:08:44

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2001323
MisterBark
be aware
Posté le 13-06-2010 à 17:55:04  profilanswer
 

salut !
ok, merci je viens de comprendre !
Donc voila ce que ca donne si on veut lister toute la table :
 
foreach( keys(%$sqlres) ){
  my $a = $_;
  print("$a :\n" );
  foreach( keys(%{ $sqlres->{$a} }) ){
    my $b = $_;
    print("  $a : $b : $sqlres->{$a}->{$b}\n" );
  }
}


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
n°2001334
gilou
Modérateur
Modzilla
Posté le 13-06-2010 à 19:45:22  profilanswer
 

Oui, c'est ce que je suggérais.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°2001368
MisterBark
be aware
Posté le 14-06-2010 à 06:21:26  profilanswer
 

dis moi Gilou, pendant que je te tiens ;) j'aurais juste une autre question qui ne vaut pas la peine de créer un topic....
 
-> comment je suis sensé faire mes requetes do("INSERT ..." ) et UPDATE lorsque le contenu de ma variable n'est pas très safe ?
 
Suffit d'escaper les ' et mettre la variable entre ' ?
je ne sais pas pourquoi mais je sens ca dangereux... (données binaires, ou commande sql qui arrive à passer...)
 
MERCI !


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)
n°2001620
dreameddea​th
Posté le 15-06-2010 à 00:15:28  profilanswer
 

bonjour à tous,
 
en dbi le do a les "bind values" : la requête en soit est "safe" (pas de protection particulière à faire), par contre, il faut que la conversion vers le type cible de la colonne soit faisable, sinon l'insert (ou l'update) plantera.
 
Qqchose du style suivant devrait marcher :

Code :
  1. $dbih->do("INSERT INTO toto(col_str,col_int, col_date) VALUES ( ?, ?, ? )",undef,["chaine pourrie contenant des caractères spéciaux : ?, )", 1, "2010/12/12 20:00:00"]);


 
d'ailleurs les binds values sont plus que préconisées pour les perfs d'insert/update, car comme la requête en elle même est "stable" il est quasi certain que la BDD réutilise le même curseur (au moins sur oracle) et donc évite de se retaper le plan d'exec et autres joyeusetés ...


Message édité par dreameddeath le 15-06-2010 à 00:16:33
n°2001622
MisterBark
be aware
Posté le 15-06-2010 à 00:30:40  profilanswer
 

Bonjour dreameddeath et merci !
 
Je vais potasser un peu ca car les bind values sont un concept nouveau que tu me fais découvrir à l'instant :)


---------------
La vie c'est comme une boite de chocolats, on ne sait jamais sur quoi on va tomber. (Forrest Gump)

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  sql : selectall_hashref (sans connaitre le nom des colonnes)

 

Sujets relatifs
connaitre les instances d'une classeimages de fond trois colonnes de même hauteur
[Résolu][Socket] connaitre l'IP de connexionSelection et tri sur plusieurs tables avec memes colonnes
Connaitre les API désormais incluses dans le JDK 1.6connaitre la taille d'un fichier en C
[Excel]Connaître la dernière ligne d'un tableauconnaitre l'utilisateur mssql
SELECT MATCH sur plusieurs colonnescopier dans différentes colonnes a la suite
Plus de sujets relatifs à : sql : selectall_hashref (sans connaitre le nom des colonnes)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR