phpbar.de logo

Mailinglisten-Archive

[php] pdo, bindvalue und Limit

[php] pdo, bindvalue und Limit

Yannik Hampe yannik at cipher-code.de
Fre Jan 18 19:06:37 CET 2008



Christian Wohlgemuth wrote:
> Yannik Hampe wrote:
>> Christian Wohlgemuth wrote:
>>> Hallo Liste,
>>>
>>> kleine Frage, vielleicht ist dieses Problem bekannt. ich möchte mit 
>>> 'prepare' eine SQL-Query zusammensetzen, aber beim Limit, bekomme ich 
>>> Probleme:
>>>
>>> [...]
>>> $result = $objDb->prepare('SELECT * FROM `profile` WHERE `name` LIKE 
>>> "%?%" OR  `kurzbeschreibung` LIKE "%?%" ORDER BY  `id` DESC LIMIT ?, ?');
>> Sowas hab ich noch nie versucht ;-). Ich würde entweder die 
>> Prozentzeichen in php ergänzen oder
>> $result = $objDb->prepare('SELECT * FROM `profile` WHERE `name` LIKE 
>> CONCAT('%',?,'%') OR  `kurzbeschreibung` LIKE CONCAT('%',?,'%') ORDER BY 
>>   `id` DESC LIMIT ?, ?');
> auch wenn ich die ?-Platzhalter durch Andere ersetze, bekomme ich 
> Probleme. Aber wie gesagt, nur bei Limit.

Also wenn du das Limit jetzt weglässt, dann geht es? Es ging mir 
schliesslich um die "" und nicht um die Benennung der Variabeln.
> 
> $result = $objDb->prepare('SELECT * FROM `profile` WHERE `name` LIKE
> "%:search1%" OR  `kurzbeschreibung` LIKE "%:search2%" ORDER BY  `id` 
> DESC LIMIT :start, :ende');
> $result->bindvalue(':suche1',$suche, PDO::PARAM_STR);
> $result->bindvalue(':suche2',$suche, PDO::PARAM_STR);
> $result->bindvalue(':start',$start, PDO::PARAM_INT);
> $result->bindvalue(':ende',$ende, PDO::PARAM_INT);
> $result->execute();
> 
> 
>> schreiben. Ich rate einfach mal, dass PDO deine ? in dem String nicht 
>> als Parameterplatzhalter ernst nimmt. Wäre ja auch doof, denn sonst 
>> könnte man da ja keine % als String in einem Query der "prepared" wird 
>> einbringen.
>> Aber nur um dich schonmal auf die Zukunft vorzubereiten:
>> http://bugs.php.net/bug.php?id=40740
> Diesen Link hatte ich auch gefunden, daher mal eine andere Frage:
> Seht ihr pdo als einsatzreif? Sollte ich vielleicht noch warten, bist 
> die Geschichte stabil läuft?

Ich halte es für Einsatzreif. Ich verwende nichts anderes mehr. Ich 
hatte allerdings bisher auch noch nie Probleme damit. Ausser bei dem 
Limit, weswegen ich im Falle von LIMIT immernoch die althergebrachte 
Methode ohne Paramter verwende. Um mich vor injections zu schützen caste 
ich die Werte vorher einfach zu einem int.
> 
>>> Vielen Dank
>>> Christian
>> Yannik
> Christian

Yannik

php::bar PHP Wiki   -   Listenarchive