Lieber PHP-Neuling,
Was hat der ":" zu bedeuten? Was wird da anders gemacht? Mich verwirrt das alles :P
Dein $db
steht ja für ein PDO-Objekt. Das bedeutet, dass Du SQL-Abfragen mit diesem umsetzt. Die PDO-Klasse kann mit benannten Platzhaltern arbeiten. Vergleiche:
$s1 = $db->prepare(
'SELECT * FROM `data` WHERE `col1`=? AND `col2`=?'
);
$s2 = $db->prepare(
'SELECT * FROM `data` WHERE `col1`=:wert1 AND `col2`=:wert2'
);
In beiden Statements stehen zwei Platzhalter. Sie sind im ersten durch Fragezeichen dargestellt, im zweiten haben sie so etwas wie Variablennamen. Schauen wir uns nun an, wie sie ausgeführt werden:
$s1->execute('Welt', 'Hallo');
$s2->execute(
':wert2' => 'Welt',
'wert1' => 'Hallo' // Doppelpunkt darf sogar fehlen
);
Im ersten execute
-Aufruf werden die Werte irrtümlicherweise in der falschen Reihenfolge notiert. Das wird im Ernstfall Fehler verursachen, die man bei der Fehlersuche vielleicht nicht so leicht findet. Im zweiten Aufruf sind die Werte an die im Statement verwendeten Namen gebunden. Sie können also schwerer verwechselt werden.
Die PDO-Klasse "versteht" solche "Variablennamen", wenn man einen Doppelpunkt voranstellt. Das Array mit den zuzuordnenden Werten muss dann in seinen Schlüsseln die entsprechenden Namen haben, im Zweifelsfalle sogar ohne den vorangestellten Doppelpunkt.
Liebe Grüße
Felix Riesterer