Pergunta

Eu tenho um monte de $ variáveis ??_POST sendo enviados no meio de uma forma longa e em vez de codificar cada um com uma mysql_escape_string() é ok para mim para fazer o seguinte? Eu não sei se este é realmente seguro e / ou código viável.

foreach ($_POST as &$post_item){
    $post_item = mysql_escape_string($post_item);
}

Estou bastante certo de que, porque eu estou usando o &, é passá-lo em por referência, não o valor, por isso estou realmente mudando o valor no $ _POST.

Além disso, devo usar mysql_real_escape_string() vez?

EDIT: Estou usando DOP e preparar (), juntamente com o método acima. Será que este cuidar dele para mim?

Foi útil?

Solução

Por que não usar array_map()?

array_map(mysql_real_escape_string, $_POST);

Mas, na realidade você deve estar usando parametrizadas declarações / preparados.

mysql_real_escape_string() leva o conjunto de caracteres de banco de dados atual em consideração, mysql_escape_string() não. Assim, o primeiro é a melhor alternativa em comparação.

Editar (na sequência de edição do OP para a pergunta):

Uma vez que você já faz DOP preparado declarações, não há necessidade de modificar seus valores. DOP cuida de tudo, que é o ponto inteiro dele ( Se você realmente colocar todos os dados em parâmetros, que é - apenas concatenar cadeias com declarações Construir SQL leva ao desastre com DOP ou sem). Escapando os valores previamente levaria a valores escaparam no banco de dados.

Outras dicas

Sim, você deve estar usando mysql_real_escape_string(), se você estiver indo para ir por esse caminho. Mas a maneira correta para se certificar as variáveis ??são seguros para enviar para o banco de dados está usando consultas parametrizadas , que são fornecidos em PHP, quer através dos mysqli funções ou DOP .

Além dos comentários anteriores, outra vantagem de se utilizar consultas parametrizadas é que o banco de dados será capaz de fazer melhor otimizações e, provavelmente, usar um plano de consulta em cache para que você irá obter um melhor desempenho.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top