Mysql escape real bucle cadena de múltiples variables
-
12-09-2019 - |
Pregunta
Digamos que quiero insertar en nombre, dirección, ciudad, estado, los valores postales $ name, $ dirección etc .....
¿Cómo puedo ejecutar mysql_real_escape_string
en cada una de las variables antes de insertar. Tiene que ser un foreach o bucle o mientras que el método en lugar de escribir cada variable de la derecha?
Gracias por la ayuda.
Tom
lo que si tengo
$data = array($address, $city, $name);
array_map('mysql_real_escape_string', $data);
y
$columns = "name, address, city, state, zip";
$count = $dbh->exec("INSERT INTO customer($columns) VALUES ($data)");
consigo un montón de errores.
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
Y ahora qué?
Solución
Un error de base de datos ha ocurrido al intentar invocar mysql_real_escape_string
y veo que está utilizando $dbh->exec()
para ejecutar la consulta. Esto sugiere que se conecta a la base de datos con DOP, por lo que debe utilizar en lugar PDO::quote
en lugar de mysql_real_escape_string
.
Por otra parte, como ya se ha mencionado, una mejor manera de resolver su problema sería el uso de declaraciones preparadas y PDO::prepare
.
Otros consejos
Se utiliza sprintf.
Por ejemplo
$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) );
O es que no es exactamente lo que estaba buscando; una manera de evitar tener que escribir "mysqli_escape_string" una y otra vez.
Usted tiene varios problemas.
En primer lugar es que es necesario asignar la salida de array_map()
a una variable, ya que no hace la conversión en el lugar. Luego hay que implosión de nuevo a una cadena.
$data = "'".implode("', '", array_map('mysql_real_escape_string', $data))."'";
El problema más grande es que eres el montaje de SQL en lugar de utilizar una capa de acceso de datos que tendría la información que está queriendo guardar y utilizar su conocimiento sobre la que desea almacenarlo para montar una instrucción SQL correcta lado, con cita adecuada y todo.
Este es también el ímpetu detrás de sugerencias para utilizar las declaraciones preparadas, por cierto, pero sólo utilizando comandos preparados es sólo la mitad de la solución, ya que todavía estaría ensamblando las sentencias SQL.