PHP - PHP y MySql, error cuando pongo en la SQL un valor de tipo texto entre comillas

 
Vista:

PHP y MySql, error cuando pongo en la SQL un valor de tipo texto entre comillas

Publicado por jach (3 intervenciones) el 01/12/2019 00:46:29
Hola.
Tengo instalado PHP 7.3 y MySQL 5.5 en Windows 10.

Estoy haciendo una pequeña página web personal y cada vez que intento
ejecutar una instrucción SQL generada desde mi script php, me da error.
Cada vez que la instrucción que genero contiene un valor de texto, puesto
entre comillas (dobles o simples, da igual), en la instrucción sql, da el mismo error.
He probado y me da el error, por ejemplo en las clausulas WHERE de una
instrucción de tipo SELECT, lo mismo en un instrucción de
tipo INSERT, siempre me señala en mismo error en el primer valor
que ponga de tipo texto, que, por supuesto, va entre comillas.

El error que me reporta siempre es el mismo:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version
for the right syntax to use near '<parte_de_sql>', at line 1

donde <parte_de_sql> es la parte de la isntrucción SQL donde comienza el primer valor que ponga entre comillas.

Por ejemplo (real):
INSERT INTO `users` VALUES (1, '[email protected]', 'd41d8cd98f00b204e9800998ecf8427e', '1', '', '', '', '', '')
Error devuelto:
You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the
right syntax to use near '\'[email protected]\', \'d41d8cd98f00b204e9800998ecf8427e\', \'1\', \'\', \'\', \'\', \'\', \'\')' at line 1

Ah, si es un campo numerico y lo pongo sin las comillas, no da error, si lo
pongo entre comillas, ahi va el error.

Sin embargo, si hago un echo al navegador de la instrucción sql generada,
la copio y la pego, por ejemplo en otro software de menejo de mi DB,
por ejemplo, Navicat, la instrucción se ejecuta sin ningun problema y
da el resultado esperado por mi.

Alguien puede darme alguna sugerencia.

Saludos a todos,
jach
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Lawliet
Val: 478
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

PHP y MySql, error cuando pongo en la SQL un valor de tipo texto entre comillas

Publicado por Lawliet (351 intervenciones) el 01/12/2019 02:19:44
Hola!!!

Hice algunas pruebas con lo que planteaste y honestamente no estoy muy seguro del motivo del error, por ejemplo, tengo una tabla con la siguiente estructura.

captura

Además, tengo como código de pruebas lo siguiente, el cual estoy seguro que si observas detenidamente verás que es lo que tu pusiste como ejemplo.

1
2
3
4
5
6
7
8
9
10
11
<?php
	$conn = mysqli_connect('localhost','root','','lawliet');
	mysqli_set_charset($conn,"utf8");
	$sql = "INSERT INTO `users` VALUES (1,'email@gmail.com','d41d8cd98f00b204e9800998ecf8427e','1','','','','','')";
	$result = mysqli_query($conn,$sql);
	if($result) {
		echo "Registro guardado correctamente.";
	} else {
		echo "ERROR: " . mysqli_error($conn);
	}
?>

Realice varias pruebas y por lo menos yo no tuve problemas al guardar, de hecho hice pruebas de guardar un número con y sin comillas y me lo guardo perfectamente, obviamente los textos me los marco como error, pero fuera de ello no tuve problema alguno. Adjunto una imagen con las evidencias de los guardados.

screen

Creo que para poder ayudarte de mejor forma sería mucho mejor colocarás el código que utilizas para realizar el guardado ya que seguramente el error se encuentra en como formas la consulta.

Sin más que comentar, quedo al pendiente de cualquier duda y/o comentario.

Saludos! :3
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP y MySql, error cuando pongo en la SQL un valor de tipo texto entre comillas

Publicado por jach (3 intervenciones) el 01/12/2019 14:12:34
Gracias por responder.
Realmente es algo incomprensible para mi, lo más interesante, como comenté en el post, es que si escribo en el navegador la instrucción SQL y la copio y pego en mi DB Administrator, funciona sin ningun problema, todo perfecto y como espero.
Anoche, se me ocurrió pensar si podría ser algún problema de codificación de texto, yo tengo configurada mi DB a UTF-8, podría ser que mi editor le esté enviando las comillas con otra codificación?
Saludos,
jach
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PHP y MySql, error cuando pongo en la SQL un valor de tipo texto entre comillas

Publicado por jach (3 intervenciones) el 01/12/2019 18:46:09
Encontré el problema pero no se como solucionarlo.
Revisando el LOG de MySQL, me di cuenta que aunque mi variable $sql
contiene la instrucción SQL generada en tiempo de ejecución, de la
siguiente manera:
INSERT INTO `users` VALUES (1, '[email protected]', 'd41d8cd98f00b204e9800998ecf8427e', '1', '', '', '', '', '')

en el LOG de MySQL me dice que recibió la instucción SQL de la siguiente manera:
Query INSERT INTO `users` VALUES (1, \'[email protected]\', \'d41d8cd98f00b204e9800998ecf8427e\', \'1\', \'\', \'\', \'\', \'\', \'\')

o sea, con BackSlash delante de cada comilla simple (probé con comillas dobles y hace lo mismo).

Aparentemente PHP está "escapando" las comillas, poniéndoles el \ delante, antes de mandarla a MySQL.

¿Qué puedo hacer?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar