Perl DBI et SELECT .. IN() ?

Le
ctobini
Bonjour,

J'utilise le module PgPP et cherche requter une base PostgreSQL
8.1.

J'ai une liste d'argements dans un tableau contenant plusieurs chanes
de caractres et je voudrais effectuer une requte l'aide de IN().

J'ai essay plusieurs mthodes :

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

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

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

En vous remerciant,

C. Tobini
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
espie
Le #1197175
In article ctobini
$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));


Jogo
Le #1210208
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

Publicité
Poster une réponse
Anonyme