dedlfix: Probleme grundsätzlicher Wissensvermittlung, z.B. PHP

Beitrag lesen

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, und addslashes 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.

Characters encoded are \, ', ", NUL (ASCII 0), \n, \r, and Control+Z. Strictly speaking, MySQL requires only that backslash and the quote character used to quote the string in the query be escaped. mysql_real_escape_string() quotes the other characters to make them easier to read in log files.

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.