Tach!
Doch die Werte gehen mit addslashes in die Datenbank
addslashes
ist dafür nicht vorgesehen, das PHP Handbuch rät davon ab. Die Begründung wird nicht genannt, aber ich würde annehmen, dass es je nach Datenbank noch weitere Zeichen gibt, die maskiert werden müssen, undaddslashes
dann nicht reicht.
Im Falle von MySQL mit ISO-8859 oder UTF-8 ist addslashes() ausreichend.
addslashes() ist eine PHP-Funktion und müsste unter der Haube nichts anderes als Stringersetzung sein.
Die mysql(i)-Escape-Funktionen sind Funktionen der MySQL-API. Das alte mysql_escape_string() (ohne i und real) arbeitete vermutlich ähnlich wie addslashes(). Die real-Variante hingegen brachte mit, dass die Zeichenkodierung auf der Verbindung berücksichtigt wurde, wenn sie mit den dafür vorgesehenen API-Funktionen und nicht mit SET NAMES gesetzt wurde.
Bei ISO-8859 und Abkömmlingen sowie UTF-8 sind die zu maskierenden Zeichen und deren Codes eindeutig, sodass keine falschen Bytes erwischt werden können, wenn man die Kodierung nicht berücksichtigt. Das "real" spielt also in unseren Breiten keine Rolle. Bleiben noch die unterschiedlichen Zeichen.
Backslash und die Quote-Zeichen werden auch von addslashes() behandelt. Damit ergibt sich kein funktional wichtiger Unterschied. Das soll nun aber nicht heißen, dass ich addslashes() empfehle.
dedlfix.