Pergunta

Digamos que eu queira inserir em nome, endereço, cidade, estado, valores de CEP $nome, $endereço etc.....

Como posso correr mysql_real_escape_string em cada uma das variáveis ​​antes de inserir.Tem que haver um método foreach ou loop ou while em vez de escrever cada variável, certo?

Obrigado pela ajuda.

Tom

então se eu tiver

 $data = array($address, $city, $name);
 array_map('mysql_real_escape_string', $data);

e

$columns = "name, address, city, state, zip";
$count = $dbh->exec("INSERT INTO customer($columns) VALUES ($data)");

Eu recebo muitos erros.

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'root'@'localhost' (using password: NO) in /Users/tommyscott45/Sites/experiment/result.php on line 23

o que agora?

Foi útil?

Solução

Ocorreu um erro no banco de dados ao tentar invocar mysql_real_escape_string e vejo que você está usando $dbh->exec() para executar a consulta.Isso sugere que você se conecte ao banco de dados com PDO, então você deve usar PDO::quote em vez de mysql_real_escape_string.

Além disso, como outros já mencionaram, a melhor maneira de resolver o seu problema seria usar declarações preparadas e PDO::prepare.

Outras dicas

Você usa sprintf.

Por exemplo

$query = sprintf("INSERT into 
                  TABLE name = '%s', address = '%s', city = '%s'",
                 mysqli_escape_string($link, $name), 
                 mysqli_escape_string($link, $address), 
                 mysqli_escape_string($link, $city) );

Ou não é exatamente isso que você estava procurando;uma maneira de evitar digitar "mysqli_escape_string" repetidamente.

Isso deve funcionar.

$data = array($address, $city, $name);
array_map('mysql_real_escape_string', $data);

Mas você realmente não deveria mais usar a extensão mysql.Dê uma olhada em DOP ou mysqli e o seu apoio às "declarações preparadas".

Você tem vários problemas.

Primeiro é que você precisa atribuir a saída de array_map() para uma variável, pois não faz conversão no local.Então você precisa implodir de volta para uma corda.

 $data = "'".implode("', '", array_map('mysql_real_escape_string', $data))."'";

O maior problema é que você está montando SQL manualmente em vez de usar uma camada de acesso a dados que pegaria as informações que você deseja salvar e usaria seu conhecimento sobre onde deseja armazená-las para montar uma instrução SQL correta, com aspas adequadas. e tudo.

Esse também é o ímpeto por trás das sugestões para usar instruções preparadas, aliás, mas apenas usar instruções preparadas é apenas metade da solução porque você ainda estaria montando instruções SQL.

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