Mysql real escape string loop múltiplas variáveis
-
12-09-2019 - |
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?
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.
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.