PDO unter Linux
Wer die PDO-Extension von PHP auf einem Linux-Server betreibt sollte sich tunlichst dies einmal ansehen. Genau wie im entsprechenden Bug-Report zu lesen hatten wir zum Einen das Problem dass Lock-Table Statements nicht funktionierten, zum Anderen dass auch fast willkürklich SQL-Statements nicht ausgeführt wurden.
Beim genaueren Hinsehen war der Fehler recht schnell entdeckt: Bei SQL Strings die die Zeichen : oder ? enthielten versuchte PDO ein prepared Statement zu erzeugen und die, natürlich nicht vorhandenen, Parameter an das SQL Statement zu binden. Dies schlägt natürlich (zu recht) fehl und erzeugt einen entsprechende Fehlermeldung. Sehr ärgerlich natürlich auch dass der Fehler nur auf Linux-Servern auftritt, identische PHP-Installationen unter Windows weisen den Fehler nicht auf.
Der (etwas erweiterte) Work-a-Round von Wez sieht wie folgt aus:
if(defined('PDO::ATTR_EMULATE_PREPARES'))
{
// nur für PHP >= 5.1.3
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
}