Pergunta

Eu estava me perguntando se fazia diferença se eu mysql_real_escape Data mais de uma vez?

Portanto, se eu escapei de dados em uma parte do meu site e, novamente, em outra parte do código. Isso seria um problema? Ou fazer a diferença?

Foi útil?

Solução

Sim. Você obteria barris desnecessárias extra.

Outras dicas

O lugar certo para mysql_real_escape é logo antes Você envia a consulta para salvar os dados. Todas as outras instâncias em qualquer outro lugar do script são uma grande falha de design.

Isso deve preferencialmente em uma própria classe de banco de dados, é claro.

Sim, seria um problema.

Por exemplo:
E se uma é "Joe's House", a primeira chamada produzirá "Joe's House" e a segunda produzirá "Joe 's House", salvando a barra de barriga no banco de dados.

Isso é semelhante ao problema que surge quando o servidor da Web possui as cotações mágicas ativadas e você usa o mysql_real_escape_string na entrada do cliente. Isso é resolvido por:

if (! get_magic_quotes_gpc()) {
    $value = mysql_real_escape_string($_GET["value"]);
} else {
    $value = mysql_real_escape_string(stripslashes($_GET["value"])); 
}

(Para este último exemplo, veja http://www.php.net/get_magic_quotes_gpc )

Editei a resposta para refletir as correções nos comentários abaixo

Obviamente, os dados seriam duplos.

Você não deve usar mysql_real_escape() de todo, consultas parametrizadas via mysqli tenho permanecido por tempo suficiente.

Sim, será um problema de excesso de redução. Isso é o mesmo para qualquer escape, independentemente do que exatamente faz. Por exemplo, se você escapar de citações duplas em string seguindo a regra comum:

bla "foo"

Depois que um escape se torna

bla \"foo\"

Depois de dois se tornam

bla \\\"foo\\\"

e assim por diante. O número de "inquéritos" deve corresponder exatamente ao número de "escapamentos". Você pode ver manifestações desse problema em alguns sites que superam alguns personagens nos campos de texto, para que o apóstrofo simples se torne \' na saída.

Não é possível distinguir entre uma corda escapada e uma sequência não redimensionada, porque a coisa que parece uma corda escapada foi a corda pretendida. Portanto, tentar escapar novamente, escaparia da fuga - e o texto escapado será o que o MySQL lê.

Portanto, você nunca deve escapar mais de uma vez.

No entanto, uma solução melhor é usar consultas paramterizadas, desde então você não precisa escapar.

Sim, faz a diferença:

$string = "I'm Chuck!";
mysql_escape_string($string); // I\'m Chuck!
mysql_escape_string(mysql_escape_string($string)); // "I\\\'m Chuck!
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top