echo $begrüßung;
Wenn wir schon mal präzise sein wollen, dann halten wir fest, dass Prepared Statements vom DBI keinesfalls simuliert werden, sondern lediglich SQL-Statements mit Platzhaltern bereitgehalten werden. Irgendwelche der von Dir an anderer Stelle zitierten Vorteile von Prepared Statements sind nicht erkennbar. Oder anders formuliert: Es geht nicht um Prepared Statements.
Der Vorteil des Einmal-Parsens und Mehrmals-Ausführen mit unterschiedlichen Werten wird hier von DBI nicht ausgenutzt. Entweder liegt MySQL in einer Version kleiner als 4.1 zugrunde oder DBI ignoriert die Möglichkeit, Prepared Statements direkt von MySQL ausführen zu lassen.
Die zweite Haupteigenschaft, bzw. eine Eigenschaft, die zumindest häufig im Umfeld von Prepared Statements zu finden ist, sind die Platzhalter. Ebenso zu PS gehört die Art, SQL-Statements mit prepare() zu übergeben und mit execute() auszuführen, denn ansonsten wäre diese Teilung überflüssig.
[...] was wissen wir wie DBI das SQL-Statement zusammenbastelt?
Höchstwahrscheinlich so, wie man es erwartet. Es ersetzt die Platzhalter mit den später übergebenen Werten, die dabei auch noch SQL-gerecht bzw. DBMS-gerecht maskiert werden. Mehr nicht.
Stichwort "pass-thru mode", d.h. die DBI-Verpackung ist dankenswerterweise recht dünn. Davon unabhängig, sind Probleme hartnäckiger Art, dann _muss_ man in die Logs des Datenservers bzw. mit einem "Profiler-Tool" kommen. Und zwar um das SQL-Statement zu packen zu kriegen.
Nun, der MySQL-Server ist sogar so nett, im General Query Log ein zusammengebautes Statement anzuzeigen:
Time Id Command Argument
070125 21:30:05 1 Connect test@localhost on test
1 Prepare [1] SELECT ID FROM test WHERE feld=?
1 Execute [1] SELECT ID FROM test WHERE feld='bla'
1 Quit
Doch bei der Fehlersuche nützt die Execute-Zeile wenig. Man sieht nur, welche Werte für welche Platzhalter verwendet werden. Generelle Syntax-Fehler fallen schon beim Prepare auf. Fehler beim Maskieren der anstelle der Platzhalter zu verwendenden Daten können aufgrund der Arbeitsweise der API nicht auftreten. Die Daten werden getrennt vom Statement und in Rohform in einer speziellen Struktur übergeben (MYSQL_BIND). Die Zusammensetzung mit dem Statement erfolgt anscheinend nur für das Log, denn, wie das Handbuch berichtet, findet das Parsen nur einmal statt. Wozu sollte dann noch das Statement zusammengesetzt werden?
An welche Art von hartnäckigem Fehler dachtest du, den man nicht schon beim Prepare oder bei genauer Analyse der Daten erkennt, wozu man also unbedingt ein zusammengesetztes Statement benötigt?
echo "$verabschiedung $name";