Pear: DB::query() und mehrere Werte per Platzhalter

Pear: DB::query() und mehrere Werte per Platzhalter

am 30.08.2005 18:07:49 von ruebner

Hallo,

wie übergebe ich mehrere Werte über einen Platzhalter mittels DB::query?

Problem: 'Rein kommen diverse Kategorie-IDs über einen Array-Parameter.
Diese sollen über implode() ihren Weg in ein prepare/execute-Array
finden, das dann zusammen mit der eigentlichen Abfrage an query()
verfüttert wird.

<--

$qData = array($_REQUEST['param1'], implode(',', $_REQUEST['param2']));

$qString = 'SELECT ditt, datt FROM t1, t2 WHERE param1 = ? AND param2 IN (?)';

$res =& db->query($qString, $qData);

-->

Was also passieren soll, ist das der zweite Platzhalter durch z.B. '1,2,3'
ersetzt wird. Allerdings kommt anscheinend nur jeweils der erste Wert
durch, so daß das Resultat etwas unbefriedigend ausfällt...

Was mache ich falsch?

TIA

Michael

Re: Pear: DB::query() und mehrere Werte per Platzhalter

am 31.08.2005 04:48:35 von Helmut Chang

Michael Rübner schrieb:

> $qData = array($_REQUEST['param1'], implode(',', $_REQUEST['param2']));
>
> $qString = 'SELECT ditt, datt FROM t1, t2 WHERE param1 = ? AND param2 IN (?)';
>
> $res =& db->query($qString, $qData);
> ...
> Was mache ich falsch?

Beim Platzhalter '?' wird de Wert je nach übergebenem Typ präpariert.
Der Query, der in der DB landet, sieht demnach so aus:

SELECT ditt, datt
FROM t1, t2
WHERE param1 = 'was auch immer in $_REQUEST[\'param1\'] steht'
AND param2 IN ('1,2,3')
^ ^

Du müsstest schreiben:
$qString = 'SELECT ditt, datt
FROM t1, t2
WHERE param1 = ?
AND param2 IN (!)';

Guggst du hier:


gruss, heli

Re: Pear: DB::query() und mehrere Werte per Platzhalter

am 31.08.2005 14:31:52 von ruebner

Helmut Chang:

> Du müsstest schreiben:
> $qString = 'SELECT ditt, datt
> FROM t1, t2
> WHERE param1 = ?
> AND param2 IN (!)';

Yep. Das war's. Besten Dank!

> Guggst du hier:
>

Hab' ich ja. Allerdings war ich wohl zu blind/blöd, um die Lösung zu
finden...

Nochmals 'Danke'.

Michael

Re: Pear: DB::query() und mehrere Werte per Platzhalter

am 31.08.2005 21:10:37 von Helmut Chang

Michael Rübner schrieb:

>>
>
>
> Hab' ich ja. Allerdings war ich wohl zu blind/blöd, um die Lösung zu
> finden...

Dort steht:

| prepare() can handle different types of placeholders (a.k.a.
| wildcards).
|
| ? - (recommended) stands for a scalar value like strings or numbers.
| The value will be automatically escaped and quoted according to the
| current DBMS's requirements.
| ! - stands for a scalar value and will inserted into the statement "as
| is".
| & - requires an existing filename, the content of this file will be
| included into the statment (i.e. for saving binary data of a graphic
| file in a database)

Brauchst a Brille? ;-)

gruss, heli

Re: Pear: DB::query() und mehrere Werte per Platzhalter

am 31.08.2005 23:47:32 von ruebner

Helmut Chang:

> | prepare() can handle different types of placeholders (a.k.a.
> | wildcards).

[snip]

Nun, _den_ Teil habe ich natürlich geflissentlich überlesen ;-)

> Brauchst a Brille? ;-)

Brauchen schon, nur leisten kann ich sie mir leider nicht. Lebe in Genf...

À bientot,

Michael