Mailinglisten-Archive |
Yannik Hampe wrote: > > Christian Wohlgemuth wrote: >> Hallo Liste, >> >> ich habe wieder ein Problem mit PDO und bindValue. >> Diesmal bei folgender Query: >> >> [..] >> $query = 'SELECT * FROM `tabelle` WHERE `tabelle`.`id` IN (?)'; >> $stmt = $pdo->prepare($query); >> $stmt->bindValue(1, implode(', ',$array)); >> $stmt->execute(); >> [..] >> >> leider bekomme ich laut mysql.log folgendes Query: >> [..] >> SELECT * FROM `tabelle` WHERE `tabelle`.`id` IN ('1, 3, 7') >> [..] >> und somit das falsche Ergebnis. > > Stimmt. So sollte es aber funktionieren: > --- > $query = 'SELECT * FROM `tabelle` WHERE `tabelle`.`id` IN > (?'.str_repeat(',?',count($array)-1).')'; > $stmt = $pdo->prepare($query); > $stmt->bindValue(1, $array); > --- > Der Code geht jedoch davon aus, dass $array immer mindestens ein Element > enthält. Du solltest entweder sicherstellen, dass dies der Fall ist, > oder meinen Code umschreiben. >> vielen Dank >> Christian > > Yannik bei deinem Code bekomme ich aber eine Nachricht bei 'bindValue': [..]Array to string conversion[..] Danach die Fehlermeldung von PDO: [..]Invalid parameter number: number of bound variables does not match number of tokens[..] Also kann ich keine Arrays übergeben bei bindValue. Ich habe es jetzt so gelöst: [..] $query = 'SELECT * FROM `tabelle` WHERE `tabelle`.`id` IN (?'.str_repeat(',?',count($array)-1).')'; $stmt = $pdo->prepare($query); $anzahl = count($array); for ($i = 0; $i < $anzahl; $i++) { $stmt->bindValue(($i+1), $array[$i]); } $stmt->execute(); Meine PHP-Version ist 5.2.1 Also ein zufriedenes Gefühl, über diese Lösung, fühlt sich anders an ;) Meint Ihr, dort wird irgendwann eine 'schönere' Lösung seitens PDO angeboten? schönen Feierabend Christian
php::bar PHP Wiki - Listenarchive