PDO Fail

Mit neuen "Tabula-Rasa" Projekten und Anforderungen (z.B. der Wegfall der mysql Extension in PHP 7.x) komme ich endlich dazu in die Welt der PDO Statements einzusteigen.

PHP Data Objects oder kurz PDO stellt eine Abstraktionsebene für den Datenbankzugriff dar und ermöglicht einen einheitlichen Zugang von PHP auf unterschiedliche SQL-basierte Datenbanken, wie zum Beispiel MySQL, PostgreSQL oder SQLite. Dabei wird unter anderem der Portierungsaufwand beim Umstieg auf eine andere Datenbank minimiert. Es wird nur der Datenbankzugriff abstrahiert, nicht die Datenbank selbst. Für die zu nutzende Datenbank wird ein datenbankspezifischer Treiber benötigt. --PHP Data Objects – Wikipedia

Vielversprechend sind natürlich auch die "parametisierten Abfragen" die gemeinhin als sicher gelten, da die Typen korrekt zugewiesen und maskiert werden.

Statt

mysql_query("SELECT * FROM table WHERE id = ". (int) $id . " AND foo = 'bar'");

Schreibt man nun

mysql_query("SELECT * FROM table WHERE id = ? AND foo = 'bar'", $id);

PDO weiss, dass ein Integer Wert von der Datenbank erwartet wird und formatiert $id entsprechend.

Meine Hoffung war übersichtliche SQL Queries zu schreiben, die nicht aus einzelnen Strings zusammengesetzt werden müssen.

Doch am Ende stellt sich heraus - auch hier wird nur mit Wasser gekocht und es gibt Möglichkeiten hässliche Stringkonstrukte zu bauen.

Fall:

Ich habe ein PHP Array mit IDs die ich als Ausschlusskriterium verwenden möchte. Die Anzahl der IDs variiert.