Първо:не използвайте mysql_escape_string , той е отхвърлен (по причина)!
Ако трябва да поддържате наследено приложение, което се свързва с базата данни чрез mysql разширение (което е оттеглено
), използвайте mysql_real_escape_string
вместо. В противен случай превключете незабавно
към mysqli , където подготвените оператори и свързаните параметри осигуряват по-стабилен механизъм за избягване на въвеждането на потребителя.
Въпреки това, отговорът може да бъде намерен, като прочетете описанието на mysql_real_escape_string
и addslashes
:
Разлика №1
addslashes не знае нищо за кодирането на връзката на MySql. Ако му предадете низ, съдържащ байтове, представляващи кодиране, различно от кодирането, използвано от връзката MySql, той с радост ще избяга всички байтове със стойностите на знаците ' , " , \ и \x00 . Това може да не е същото като всички знаци ' , " , \ и \x00 ако използвате кодиране, различно от 8-битово кодиране и UTF-8. Резултатът ще бъде, че низът, получен от MySql, ще бъде повреден.
За да задействате тази грешка, опитайте да използвате iconv
за да преобразувате вашата променлива в UTF-16 и след това да я екранирате с addslashes . Вижте какво получава вашата база данни.
Това е една от причините addslashes не трябва да се използва за бягство.
Разлика №2
За разлика от addslashes , mysql_real_escape_string също така избягва символите \r , \n и \x1a . Изглежда, че тези знаци също трябва да бъдат екранирани, когато се говори с MySql, в противен случай резултатът може да бъде неправилно оформена заявка
Това е другата причина, поради която addslashes не трябва да се използва за бягство.