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