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é?

¿Fue útil?

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.

Esto debería funcionar.

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

Pero que realmente no debería utilizar la extensión mysql más. Echar un vistazo a DOP o mysqli y su apoyo a "declaraciones preparadas".

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top