Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Qual é a diferença entre os addlashes do PHP e o mysql(i)_escape_string?


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.