Das Fragezeichen als Platzhalter ist ziemlich verbreitet und für den Datenbanktreiber einfacher zu parsen als :meinTollesFeld
. Wenn ich die MySQL Doku richtig lese, unterstützt MySQL nur das Fragezeichen und keine benannten Parameter. Deshalb ist im mysqli Interface auch nur das Fragezeichen unterstützt.
Die Benennung von Parametern ist ein Feature, dass manche Datenbanken nativ mitbringen (z.B. MS SQL Server). PDO ist ein Datenbanktreiber, der diese Unterschiede neutralisiert und darum kannst Du in PDO sowohl Namen als auch Fragezeichen als Parameter-Marker nutzen (nur nicht gemischt in einem Statement). PDO baut das beim prepare() passend für die verwendete Datenbank um. Wenn Du direkt die Fragezeichen verwendest, hast Du einen minimalen Laufzeitvorteil, erkaufst den aber mit einem Nachteil im Wartungsaufwand, weil Du bei jeder Änderung genau abzählen musst welches Fragezeichen wo steht. (Quelle). Sinn von prepared statements ist es jedenfalls, die DATEN nicht mehr dynamisch ins SQL einzubauen, und sich damit die SQL-Escaperei zu sparen. Alles andere muss in den SQL String, weil Schlüsselworte und dynamische Elemente sich nicht preparen lassen.
Rolf