PostgreSQL PREPARE-Abfrage mit IN () -Parametern

10

Ich versuche eine Abfrage von PHP vorzubereiten wie:

pg_prepare($con, "prep", "select * from test where tid in ($1)");

und dann ausführen mit:

$strpar = "3,4,6,8,10";
pg_execute($con, "prep", array($strpars));

Das Problem ist, dass ich keine Reihe von Werten übergeben kann, die erstellt wurden, da prep eine feste Anzahl von Parametern erwartet. Gibt es eine Möglichkeit, die Parameter dynamisch zu gestalten?

Fabrizio Mazzoni
quelle

Antworten:

15

Verwenden Sie ein Array, um die Reihe von Werten darzustellen:

pg_prepare($con, "prep", "select * from test where tid=ANY($1::int[])");

$strpar = "{3,4,6,8,10}";
pg_execute($con, "prep", array($strpars));

Die Umwandlung int[]in die Abfrage ist möglicherweise sogar überflüssig, wenn der Planer den Typ selbst ableiten kann.

Daniel Vérité
quelle