Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

4 réponses
Avatar
ctobini
Bonjour,

J'utilise DBD::MySQL pour me connecter =E0 une base que j'ai cr=E9=E9e.

Je souhaite ex=E9cuter :

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

Mais =E7a ne marche pas du tout.

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

En vous remerciant,

C=2E Tobini

4 réponses

Avatar
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 : <http://www.le-gnu.net> - Ce qui se conçoit bien ... -+-

Avatar
ctobini
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 wrote:
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 : <http://www.le-gnu.net> - Ce qui se conçoit bien ... -+-



Avatar
ctobini
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 wrote:
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 : <http://www.le-gnu.net> - Ce qui se conçoit bien ... -+-



Avatar
Paul Gaborit
À (at) Wed, 03 Oct 2007 08:51:58 -0700,
ctobini écrivait (wrote):
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 - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>