Primeiro de tudo:não use
mysql_escape_string
, está obsoleto (por um motivo)! Se você precisa suportar um aplicativo legado que se conecta ao banco de dados através do
mysql
extensão (que foi obsoleta
), use mysql_real_escape_string
em vez de. Caso contrário, troque imediatamente
para mysqli
, em que instruções preparadas e parâmetros vinculados fornecem um mecanismo mais robusto para escapar da entrada do usuário. Dito isso, a resposta pode ser encontrada lendo a descrição de
mysql_real_escape_string
e addslashes
:Diferença nº 1
addslashes
não sabe nada sobre codificações de conexão MySql. Se você passar uma string contendo bytes representando uma codificação diferente da codificação usada pela conexão MySql, ela escapará com prazer todos os bytes com os valores dos caracteres '
, "
, \
e \x00
. Isso pode não ser o mesmo que todos os caracteres '
, "
, \
e \x00
se você estiver usando uma codificação diferente de codificações de 8 bits e UTF-8. O resultado será que a string recebida pelo MySql será corrompida. Para acionar esse bug, tente usar
iconv
para converter sua variável para UTF-16 e depois escapar com addslashes
. Veja o que seu banco de dados recebe. Esta é uma razão pela qual
addslashes
não deve ser usado para escapar. Diferença nº 2
Em contraste com
addslashes
, mysql_real_escape_string
também escapa os caracteres \r
, \n
e \x1a
. Parece que esses caracteres também precisam ser escapados ao conversar com o MySql, caso contrário, uma consulta malformada pode ser o resultado Esta é a outra razão pela qual
addslashes
não deve ser usado para escapar.