Foros del Web » Programando para Internet » PHP »

comillas simples al insertar registro

Estas en el tema de comillas simples al insertar registro en el foro de PHP en Foros del Web. Hola, tengo una base de datos codificado con UTF-8 y todos los cotejamientos y campos con unicode_ci, mis páginas web con UTF-8... El es que ...
  #1 (permalink)  
Antiguo 12/10/2011, 03:25
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
comillas simples al insertar registro

Hola, tengo una base de datos codificado con UTF-8 y todos los cotejamientos y campos con unicode_ci, mis páginas web con UTF-8...

El es que al insertar un registro que contenga comillas simples, simplemente no me lo inserta.

Paso los datos por AJAX con el encodeURIComponent y los inserto tal cual me llegan, sin modificaciones...

A qué puede ser debido?
  #2 (permalink)  
Antiguo 12/10/2011, 06:10
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 3 meses
Puntos: 81
Respuesta: comillas simples al insertar registro

Es obvio porque sucede eso, cuando uno intenta hacer un insert en una tabla hace esto:

$sql = "INSERT INTO tabla (campo1, campo2) VALUES ('valor1', 'valor2')";

qué pasa si reemplazamos valor2 por valor'2, tendríamos esto:

$sql = "INSERT INTO tabla (campo1, campo2) VALUES ('valor1', 'valor'2')";

vemos que la comilla simple se cierra antes de completar la sentencia sql adecuadamente, eso provoca el error. La solución? simplemente escapa la comilla. Podrías hacerlo de este modo:

$valor = str_replace("'", "\'", $valor);

Espero que te sirva.
  #3 (permalink)  
Antiguo 12/10/2011, 07:13
Avatar de Maganius  
Fecha de Ingreso: septiembre-2010
Mensajes: 310
Antigüedad: 13 años, 6 meses
Puntos: 10
Respuesta: comillas simples al insertar registro

Pudes usar mysql_escape_string de esta forma:

Código PHP:
Ver original
  1. $query = sprintf("INSERT INTO tabla (campo1, campo2 ) VALUES ('%s', '%s')",
  2.             mysql_real_escape_string($user),
  3.             mysql_real_escape_string($password));
  #4 (permalink)  
Antiguo 12/10/2011, 07:20
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Respuesta: comillas simples al insertar registro

gracias Artificium me funionó perfcetamente, no había pensado en ello. En la base de datos ,e guarda el campo normal, com comillas simples pero sin el \ lo cual creo que es normal, no?

lo del mysql_real_escape_string no tengo claro como funciona por lo que no lo puedo usar pero se agradece
  #5 (permalink)  
Antiguo 12/10/2011, 07:30
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 3 meses
Puntos: 81
Respuesta: comillas simples al insertar registro

Mejor prueba mysql_real_escape, honestamente no conocía esa función por eso no te la recomendé, pero es más seguro usarla, te puedo evitar otros problemas, te diré como hacerlo.

$valor2 = mysql_real_escape_string($valor2);

$sql = "INSERT INTO tabla (campo1, campo2) VALUES ('valor1', '$valor2')";

Eso sería todo.
  #6 (permalink)  
Antiguo 12/10/2011, 07:43
Avatar de humanista  
Fecha de Ingreso: abril-2005
Mensajes: 878
Antigüedad: 19 años
Puntos: 15
Respuesta: comillas simples al insertar registro

pues tienes razón Artificium, funciona!, karma para ti y para Maganius, gracias!!!
  #7 (permalink)  
Antiguo 12/10/2011, 07:48
Avatar de Artificium  
Fecha de Ingreso: enero-2011
Mensajes: 492
Antigüedad: 13 años, 3 meses
Puntos: 81
Respuesta: comillas simples al insertar registro

Me alegra que te haya funcionado.

Etiquetas: comillas, registro, simples
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:56.