DBD::MySQL: passer liste à $dbh->do() ?

Le
ctobini
Bonjour,

J'utilise DBD::MySQL pour me connecter à une base que j'ai créée.

Je souhaite exécuter :

my $sth = $dbh->do(
sprintf (
"
CREATE VIEW vue AS SELECT * FROM ma_table
WHERE table_name IN (%s)
"
, $dbh->quote(join ',', keys %h_des_noms)
);

Mais ça ne marche pas du tout.

Sauriez-vous comment passer une liste en argument avec un hash ou
tableau ?

En vous remerciant,

C. Tobini
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jogo
Le #152216
Sur fr.comp.lang.perl, ctobini disait :

my $sth = $dbh->do(
sprintf (
" CREATE VIEW vue AS SELECT * FROM ma_table
WHERE table_name IN (%s) ",
$dbh->quote(join ',', keys %h_des_noms)
);

Mais ça ne marche pas du tout.


À vue de nez $dbh->quote quote les virgules. Du coup :
- tenter d'afficher la requête avant de l'envoyer au SGBDR ;
- utiliser plutôt : join(',',map {$dbh->quote($_)} keys %h).

J'espère ne pas être à côté, mais avec le message d'erreur ça serait
moins facile de faire un hors sujet.

--
RXN0LWNlIHF1J29uIHV0aWxpc2UgdW4gcHJvZ3JhbW1lIGRlIGxvZpwbv
bm5lY3RlciBhIEN5YmVyY2FibGUsDQpwb3VyIGVudHJlciBsZSBub20ZG9
bGUgcGFzc3dvcmQgPw0KU2kgb3VpLCBxdWVsIHByb2dyYW1tZSBlc3Qta
-+-UK in :
ctobini
Le #152126
Bonjour et merci de la réponse,

Je n'ai pas de message d'erreur, il y a injection de champs NULL, mais
constitution de la vue quand même.

Je vais tenter cette manip et je fais un retour.

C. Tobini

On 3 oct, 17:30, Jogo
Sur fr.comp.lang.perl, ctobini disait :

my $sth = $dbh->do(
sprintf (
" CREATE VIEW vue AS SELECT * FROM ma_table
WHERE table_name IN (%s) ",
$dbh->quote(join ',', keys %h_des_noms)
);

Mais ça ne marche pas du tout.


À vue de nez $dbh->quote quote les virgules. Du coup :
- tenter d'afficher la requête avant de l'envoyer au SGBDR ;
- utiliser plutôt : join(',',map {$dbh->quote($_)} keys %h).

J'espère ne pas être à côté, mais avec le message d'erreur ça serait
moins facile de faire un hors sujet.

--
RXN0LWNlIHF1J29uIHV0aWxpc2UgdW4gcHJvZ3JhbW1lIGRlIGxvZpwbv
bm5lY3RlciBhIEN5YmVyY2FibGUsDQpwb3VyIGVudHJlciBsZSBub20ZG9
bGUgcGFzc3dvcmQgPw0KU2kgb3VpLCBxdWVsIHByb2dyYW1tZSBlc3Qta
-+-UK in :


ctobini
Le #152125
La solution proposée est presque la bonne, j'y suis arrivé en
faisant :

my $liste = '';
map { $liste .= "'$_'," } keys %ad;
$liste =~ s/,$//;
my $sth = $dbh->do("DROP VIEW IF EXISTS show_ad");
my $sth = $dbh->do
(
sprintf
(
"
CREATE VIEW show_ad AS SELECT * FROM
probeset
WHERE probeset_name IN (%s)
"
, $liste
)
);

Merci encore et bonne soirée.

C. Tobini

On 3 oct, 17:30, Jogo
Sur fr.comp.lang.perl, ctobini disait :

my $sth = $dbh->do(
sprintf (
" CREATE VIEW vue AS SELECT * FROM ma_table
WHERE table_name IN (%s) ",
$dbh->quote(join ',', keys %h_des_noms)
);

Mais ça ne marche pas du tout.


À vue de nez $dbh->quote quote les virgules. Du coup :
- tenter d'afficher la requête avant de l'envoyer au SGBDR ;
- utiliser plutôt : join(',',map {$dbh->quote($_)} keys %h).

J'espère ne pas être à côté, mais avec le message d'erreur ça serait
moins facile de faire un hors sujet.

--
RXN0LWNlIHF1J29uIHV0aWxpc2UgdW4gcHJvZ3JhbW1lIGRlIGxvZpwbv
bm5lY3RlciBhIEN5YmVyY2FibGUsDQpwb3VyIGVudHJlciBsZSBub20ZG9
bGUgcGFzc3dvcmQgPw0KU2kgb3VpLCBxdWVsIHByb2dyYW1tZSBlc3Qta
-+-UK in :


Paul Gaborit
Le #152123
À (at) Wed, 03 Oct 2007 08:51:58 -0700,
ctobini
La solution proposée est presque la bonne, j'y suis arrivé en
faisant :

my $liste = '';
map { $liste .= "'$_'," } keys %ad;
$liste =~ s/,$//;


Ces trois lignes pourraient être remplacées par :

my $liste = join ",", map {"'$_'"} keys %ad;

qui me semble plus simple et plus lisible...

--
Paul Gaborit - Perl en français -
Publicité
Poster une réponse
Anonyme