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

Perl DBI et SELECT .. IN() ?

2 réponses
Avatar
ctobini
Bonjour,

J'utilise le module PgPP et cherche =E0 requ=EAter une base PostgreSQL
8.1.

J'ai une liste d'argements dans un tableau contenant plusieurs cha=EEnes
de caract=E8res et je voudrais effectuer une requ=EAte =E0 l'aide de IN().

J'ai essay=E9 plusieurs m=E9thodes :

$sth =3D $dbh->prepare(sprintf "SELECT a FROM b WHERE b IN(%s)", $dbh-
>quote(join ',', @tab))

$sth =3D $dbh->prepare(sprintf "SELECT a FROM b WHERE b IN(?, ?)
$sth->bind_param(1, $tab[0]);
$sth->bind_param(2, $tab[1])
Cette m=E9thode est cens=E9e ne pas fonctionner mais au point o=F9 j'en
suis...

Sauriez-vous comment passer un tableau ou hash avec IN() ou une
m=E9thode faisant le travail =E9quivalent ?

En vous remerciant,

C. Tobini

2 réponses

Avatar
espie
In article ,
ctobini wrote:
$sth = $dbh->prepare(sprintf "SELECT a FROM b WHERE b IN(%s)", $dbh-
quote(join ',', @tab))



J'essaierais bien:

$sth = $dbh-prepare(sprintf "SELECT a FROM b WHERE b IN(%s)",
join(',', map { $dbh->quote($_) } @tab));


Avatar
Jogo
Sur fr.comp.lang.perl, ctobini disait :

Sauriez-vous comment passer un tableau ou hash avec IN() ou une
méthode faisant le travail équivalent ?


Avec DBD::Pg et postgreSQL 8.2, je fais quelquechose comme :

$sth = $dbh->prepare(q{
SELECT a FROM b WHERE b = ANY (?) });
$sth->execute('{'.join(',',@tab).'}');

La syntaxe "= ANY" force l'évaluation d'un tableau.

--
Nous prenons plaisir à contempler les images les plus exactes de
choses dont la vue nous est pénible dans la réalité.
-- Aristote