Problem mit Prepared Statement und LIKE

Problem mit Prepared Statement und LIKE

am 16.09.2007 20:15:30 von Christian Aigner

Keine Ahnung, ob es eher zu MySQL oder PHP gehört, daher bitte ich um
Entschuldigung für den Crosspost.

Ich versuch jetzt seit geraumer Zeit, eine Abfrage hinzubekommen, aber
irgendwie klappt's nicht.

Es geht um folgende Abfrage:

// laut Anleitung von
//http://pear.php.net/manual/en/package.database.mdb2.intro- execute.php

// MDB2-Objekt $mdb2 existiert bereits...
$search = "'%wort%'";
$sql = 'SELECT * FROM mytable WHERE field LIKE ?';
$value = array($search);
$prepared = $mdb2->prepare($sql);
$result = $prepared->execute($value);
echo $result->numRows(); // liefert 0 -> FALSCH!

Eigentlich müßte 1 zurück kommen, denn wenn ich im phpMyAdmin

SELECT * FROM mytable WHERE field LIKE '%wort%'

ausführe, dann bekomme ich das richtige Resultat.

Woran liegt's? Was hab ich übersehen? Funktioniert das so bei irgend
jemand?

LG,
Christian

Re: Problem mit Prepared Statement und LIKE

am 16.09.2007 20:40:59 von Michael Fesser

..oO(Christian Aigner)

>// laut Anleitung von
>//http://pear.php.net/manual/en/package.database.mdb2.intro -execute.php
>
>// MDB2-Objekt $mdb2 existiert bereits...
>$search = "'%wort%'";
>$sql = 'SELECT * FROM mytable WHERE field LIKE ?';
>$value = array($search);
>$prepared = $mdb2->prepare($sql);
>$result = $prepared->execute($value);
>echo $result->numRows(); // liefert 0 -> FALSCH!
>
>Eigentlich müßte 1 zurück kommen, denn wenn ich im phpMyAdmin
>
>SELECT * FROM mytable WHERE field LIKE '%wort%'
>
>ausführe, dann bekomme ich das richtige Resultat.
>
>Woran liegt's? Was hab ich übersehen? Funktioniert das so bei irgend
>jemand?

Versuch mal

$search = '%wort%';

Micha

Re: Problem mit Prepared Statement und LIKE

am 16.09.2007 20:40:59 von Michael Fesser

..oO(Christian Aigner)

>// laut Anleitung von
>//http://pear.php.net/manual/en/package.database.mdb2.intro -execute.php
>
>// MDB2-Objekt $mdb2 existiert bereits...
>$search = "'%wort%'";
>$sql = 'SELECT * FROM mytable WHERE field LIKE ?';
>$value = array($search);
>$prepared = $mdb2->prepare($sql);
>$result = $prepared->execute($value);
>echo $result->numRows(); // liefert 0 -> FALSCH!
>
>Eigentlich müßte 1 zurück kommen, denn wenn ich im phpMyAdmin
>
>SELECT * FROM mytable WHERE field LIKE '%wort%'
>
>ausführe, dann bekomme ich das richtige Resultat.
>
>Woran liegt's? Was hab ich übersehen? Funktioniert das so bei irgend
>jemand?

Versuch mal

$search = '%wort%';

Micha

Re: Problem mit Prepared Statement und LIKE

am 16.09.2007 21:31:41 von Andreas Scherbaum

Christian Aigner wrote:
>
> $prepared = $mdb2->prepare($sql);
> $result = $prepared->execute($value);

Hier fehlt eine Fehlerprüfung, die liefert dann auch die Antworten,
warum dein Query nicht funktioniert.


> Woran liegt's? Was hab ich übersehen? Funktioniert das so bei irgend
> jemand?

Da wurde ja parallel schon eine Antwort geliefert, habe ich
gerade gesehen.


Bye

--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)

Re: Problem mit Prepared Statement und LIKE

am 16.09.2007 21:31:41 von Andreas Scherbaum

Christian Aigner wrote:
>
> $prepared = $mdb2->prepare($sql);
> $result = $prepared->execute($value);

Hier fehlt eine Fehlerprüfung, die liefert dann auch die Antworten,
warum dein Query nicht funktioniert.


> Woran liegt's? Was hab ich übersehen? Funktioniert das so bei irgend
> jemand?

Da wurde ja parallel schon eine Antwort geliefert, habe ich
gerade gesehen.


Bye

--
Andreas 'ads' Scherbaum
Failure is not an option. It comes bundled with your Microsoft product.
(Ferenc Mantfeld)

Re: Problem mit Prepared Statement und LIKE

am 17.09.2007 10:33:36 von Christian Aigner

Am Sun, 16 Sep 2007 20:40:59 +0200, schrieb Michael Fesser
:

> Versuch mal
>
> $search = '%wort%';
>
> Micha

Danke, das funktioniert jetzt. :-)

Christian

Re: Problem mit Prepared Statement und LIKE

am 17.09.2007 10:33:36 von Christian Aigner

Am Sun, 16 Sep 2007 20:40:59 +0200, schrieb Michael Fesser
:

> Versuch mal
>
> $search = '%wort%';
>
> Micha

Danke, das funktioniert jetzt. :-)

Christian

Re: Problem mit Prepared Statement und LIKE

am 21.09.2007 05:08:20 von oliver.graetz

Christian Aigner schrieb:
> Am Sun, 16 Sep 2007 20:40:59 +0200, schrieb Michael Fesser
> :
>=20
>> Versuch mal
>>
>> $search =3D '%wort%';
>>
>> Micha
>=20
> Danke, das funktioniert jetzt. :-)

Um das noch zu vertiefen: Was hier passiert ist, ist doppeltes Quoting.
Die einfachen Anführungszeichen in deinem Parameter "'%wort'" wurden de=
r
Query in escapeter Form zugeführt, also wurde tatsächlich nach einem
einfachen Anführungszeichen, gefolgt von beliebig vielen beliebigen
Zeichen, gefolgt von wort, gefolgt von beliebig vielen beliebigen
Zeichen, gefolgt von einem einfachen Anführungszeichen gesucht.

OLLi


--=20
"ack ack ack"
[Mars Attacks]

Re: Problem mit Prepared Statement und LIKE

am 21.09.2007 05:08:20 von oliver.graetz

Christian Aigner schrieb:
> Am Sun, 16 Sep 2007 20:40:59 +0200, schrieb Michael Fesser
> :
>=20
>> Versuch mal
>>
>> $search =3D '%wort%';
>>
>> Micha
>=20
> Danke, das funktioniert jetzt. :-)

Um das noch zu vertiefen: Was hier passiert ist, ist doppeltes Quoting.
Die einfachen Anführungszeichen in deinem Parameter "'%wort'" wurden de=
r
Query in escapeter Form zugeführt, also wurde tatsächlich nach einem
einfachen Anführungszeichen, gefolgt von beliebig vielen beliebigen
Zeichen, gefolgt von wort, gefolgt von beliebig vielen beliebigen
Zeichen, gefolgt von einem einfachen Anführungszeichen gesucht.

OLLi


--=20
"ack ack ack"
[Mars Attacks]

Re: Problem mit Prepared Statement und LIKE

am 21.09.2007 09:39:39 von Christian Aigner

Am Fri, 21 Sep 2007 05:08:20 +0200, schrieb Oliver Grätz
:

> Christian Aigner schrieb:
> > Am Sun, 16 Sep 2007 20:40:59 +0200, schrieb Michael Fesser
> > :
> >
> >> Versuch mal
> >>
> >> $search = '%wort%';
> >>
> >> Micha
> >
> > Danke, das funktioniert jetzt. :-)
>
> Um das noch zu vertiefen: Was hier passiert ist, ist doppeltes Quoting.
> Die einfachen Anführungszeichen in deinem Parameter "'%wort'" wurden der
> Query in escapeter Form zugeführt, also wurde tatsächlich nach einem
> einfachen Anführungszeichen, gefolgt von beliebig vielen beliebigen
> Zeichen, gefolgt von wort, gefolgt von beliebig vielen beliebigen
> Zeichen, gefolgt von einem einfachen Anführungszeichen gesucht.
>
> OLLi

Der Grund, warum ich es so gemacht habe, war der, daß ja im "normalen"
SQL-Statement auch Quotes verwendet werden müssen. Daher dachte ich,
ich muß die Quotes auch bei einem Prepared Statement übergeben.

SELECT * FROM tabelle WHERE name LIKE "%kar%"

Daher dachte ich, ich müßte das "%kar%" durch "%?%" ersetzen.

Danke für die Erklärung.
Christian

Re: Problem mit Prepared Statement und LIKE

am 21.09.2007 09:39:39 von Christian Aigner

Am Fri, 21 Sep 2007 05:08:20 +0200, schrieb Oliver Grätz
:

> Christian Aigner schrieb:
> > Am Sun, 16 Sep 2007 20:40:59 +0200, schrieb Michael Fesser
> > :
> >
> >> Versuch mal
> >>
> >> $search = '%wort%';
> >>
> >> Micha
> >
> > Danke, das funktioniert jetzt. :-)
>
> Um das noch zu vertiefen: Was hier passiert ist, ist doppeltes Quoting.
> Die einfachen Anführungszeichen in deinem Parameter "'%wort'" wurden der
> Query in escapeter Form zugeführt, also wurde tatsächlich nach einem
> einfachen Anführungszeichen, gefolgt von beliebig vielen beliebigen
> Zeichen, gefolgt von wort, gefolgt von beliebig vielen beliebigen
> Zeichen, gefolgt von einem einfachen Anführungszeichen gesucht.
>
> OLLi

Der Grund, warum ich es so gemacht habe, war der, daß ja im "normalen"
SQL-Statement auch Quotes verwendet werden müssen. Daher dachte ich,
ich muß die Quotes auch bei einem Prepared Statement übergeben.

SELECT * FROM tabelle WHERE name LIKE "%kar%"

Daher dachte ich, ich müßte das "%kar%" durch "%?%" ersetzen.

Danke für die Erklärung.
Christian