Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] You have an error in your SQL syntax; check the manual that corresponds to your MySQL

Estas en el tema de You have an error in your SQL syntax; check the manual that corresponds to your MySQL en el foro de PHP en Foros del Web. Hola a Todos!!! tengo un error al intentar actualizar los datos de una tabla clientes esta es la consulta: Cita: Editado: Código de programación no ...
  #1 (permalink)  
Antiguo 04/08/2015, 20:03
Avatar de Rag_Doll  
Fecha de Ingreso: julio-2015
Ubicación: Colombia
Mensajes: 20
Antigüedad: 8 años, 9 meses
Puntos: 0
You have an error in your SQL syntax; check the manual that corresponds to your MySQL

Hola a Todos!!!

tengo un error al intentar actualizar los datos de una tabla clientes

esta es la consulta:

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las reglas del foro, por favor.
este es el error que muestra:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL

leyendo otros foros me fije en poner un echo con la consulta para ver algun error y me imprime esto:

Código SQL:
Ver original
  1. UPDATE clientes SET tipo = 'Cedula', numero = '100000', nombre = 'fulanito',
  2. apellido = 'pino', telefono = '3521587', celular = '124587944', correo= '[email protected]',
  3. nacimiento = '1991-11-04', ocupacion= 'estudiante', convenio ='Ninguno'
  4. WHERE idcliente = 57)

disculpen de antemano si hay algùn error (de esos que todo novato comete), muchas gracias por la ayuda que me puedan brindar.

Última edición por gnzsoloyo; 04/08/2015 a las 20:10
  #2 (permalink)  
Antiguo 05/08/2015, 12:28
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

todos tus datos son de tipo entero?? ya probaste esa consulta desde la consola de MYsql?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 05/08/2015, 12:39
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

Lo único que a mi no me cierra del todo es ese paréntesis que te ha quedado al final de la consulta. No estoy seguro si es un Copy+Paste mal hecho, o es que realmente está quedando allí en el SQL.
Si es lo segundo, quítalo y vuelve a probar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 05/08/2015, 17:35
Avatar de Rag_Doll  
Fecha de Ingreso: julio-2015
Ubicación: Colombia
Mensajes: 20
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

Hola a Todos!!!

libras la mayoria son varchar, la fecha de nacimiento si es tipo date y una adicional que es automatica y solo se guarda una vez, aqui esta la estructura de la tabla:

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `gym`.`clientes` (
  2.   `idcliente` INT NOT NULL AUTO_INCREMENT,
  3.   `tipo` VARCHAR(50) NOT NULL,
  4.   `numero` VARCHAR(50) NOT NULL,
  5.   `nombre` VARCHAR(50) NOT NULL,
  6.   `apellido` VARCHAR(50) NOT NULL,
  7.   `telefono` VARCHAR(45) NULL,
  8.   `celular` VARCHAR(45) NULL,
  9.   `correo` VARCHAR(45) NULL,
  10.   `nacimiento` DATE NOT NULL,
  11.   `ocupacion` VARCHAR(45) NOT NULL,
  12.   `convenio` VARCHAR(50) NULL,
  13.   `inscripcion` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  14.   PRIMARY KEY (`idcliente`))
  15. ENGINE = InnoDB;

gnzsoloyo tienes razòn, es un mal copy+paste, la consulta es esta:
Código SQL:
Ver original
  1. UPDATE clientes SET tipo='$tipoid' , numero='$numero' ,
  2. nombre ='$nombre' , apellido='$apellido' , telefono='$telefono' , celular='$celular'
  3. , correo='$correo' , nacimiento='$nacimiento' , ocupacion='$ocupacion' ,
  4. convenio='$convenio' WHERE idcliente = ".$id
Cita:
Editado: Codigo de programacion no permitido en foros de BBDD
està dentro de una funciòn

de antemano muchas gracias por sus aportes y ayuda!!!

Última edición por gnzsoloyo; 06/08/2015 a las 07:04
  #5 (permalink)  
Antiguo 06/08/2015, 07:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

Mira, en términos generales no hay errores en la sintaxis de la query, al menos a nivel de SQL: Pero como la construyes dinámicamente, es altamente probable que tengas problemas con el contenido de las variables, y alli la cosa no es visible desde el lado de la BBDD.
Lo que veo con más posibilidades son dos cosas: !) En los valores de cadena hay algo que está entrando que rompe la cadena y genera el error. Eso suele suceder cuando en un campo dado entra un apóstrofo('), dado que ese tipo de caracteres deben ser escapados para meterlos en el SQL.
La otra posibilidad es quew el valor del ID esté llegando vacío, ya que sería el unico valor cuya ausencia genraría un error sintáctico.
Desde ya, es correcto que pongas un valor numerico sin apostrofos porque so permite detectar esrrores de programación que disparan errores de sintaxis.
tendrás que debuggear tu función y verificar si los valores de las variables están pasando correctamente. Pero eso es tema de PHP, no de MySQL.

Revisa, debuggea y veamos por donde falla la cosa.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 10/08/2015, 19:18
Avatar de Rag_Doll  
Fecha de Ingreso: julio-2015
Ubicación: Colombia
Mensajes: 20
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

Hola a Todos!!!

De antemano disculpen la tardanza, en fin; revise el codigo y siguiendo el consejo de gnzsoloyo pasa lo siguiente:

si dejo los apostrofes surge el mismo error, ahora si quito todos menos a los que imprimen nùmeros, me arroja esto:

Se produjo un error. Intente nuevamenteYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'alonso , apellido=ramirez perez , telefono='545' , celular='324564' ' at line 1

en la variable nombre debia salir 'jorge alonso' y el resto de las variables no las imprime. ahora si quito todos los apostrofes sale lo siguiente:

Se produjo un error. Intente nuevamenteYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'alonso , apellido=ramirez perez , telefono=3386404 , celular=3165885901 , corr'

ese 'corr' hace referencia a correo, que es como deberia seguir la cadena, no se si el error esta dentro de lo que imprime, o de lo que no (disculparàn la poca deducciòn que pueda tener), muchas gracias por sus aportes!!!
  #7 (permalink)  
Antiguo 11/08/2015, 06:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

Cita:
si dejo los apostrofes surge el mismo error, ahora si quito todos menos a los que imprimen nùmeros, me arroja esto:
Por lo pronto, no estás entendiendo lo que te quise decir.
Supongamos que en tu campo apellido, entrase un nombre como Oscar apellido como O'Hara. Eso haría que la query quedase así:

Código MySQL:
Ver original
  1. ..., apellido = 'O'Hara', nombre = 'Oscar'
¿Notas como se ha roto la contención de la cadena de texto, y parte del "Hara" y el siguiente campo aparecen como cadenas, pero no el "Oscar"?.
Bueno, eso pasa cuando en una variable entra un apostrofo, y el mismo no se procesa para ser escapado.

A eso me refería, porque es un problema posible al crearse las consultas en forma programática. Y no es el único caso que las puede hacer fallar.

Por otro lado, según devuelve el mensae, parte de la query dice así:

Código MySQL:
Ver original
  1. 'alonso , apellido=ramirez perez , telefono='545' , celular='324564' '
Como se puede ver, tanto el "alonso", como "ramirez perez", no han quedado encerrados entre apostrofos como las cadenas de texto que son, y sí han quedado los valores numéricos, al revés de lo que dices.

Eso debería estar viéndose:
Código MySQL:
Ver original
  1. 'alonso' , apellido='ramirez perez' , telefono=545 , celular=324564

Ene se contexto, es evidente, para mi, que estás cometiendo errores en la creacion de la sentencia a nivel prograático. Pero como el tema de programación es OFF TOPIC en los foros de BBDD, voy a mover tu posts al foro de PHP para que podamos seguir viéndolo desde ese lado.

Movido a PHP para continuar el tema desde programación en PHP.

Postea nuevamente el código PHP donde creas la query, y también la parte donde lo ejecutas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 11/08/2015, 07:26
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

¿Qué librería usas para ejecutar la consulta?

El detalle es que debes "escapar" los valores apropiadamente, y no sólo agregar apostrofes a diestra y siniestra.

Por ejemplo, vamos a imaginar que usas PostgreSQL así que la función sería pg_escape_string():

Que básicamente agregará los apostrofes requeridos sin romper nada.

Tienes que buscar el equivalente para lo que usas.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 11/08/2015, 08:15
Avatar de Rag_Doll  
Fecha de Ingreso: julio-2015
Ubicación: Colombia
Mensajes: 20
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

Hola a Todos!!!

Ya voy entendiendo un poco, sin embargo, antes ya habia creado CRUD y desde que aprendi a actualizar por ejemplo todo ha funcionado hasta ahora claramente, pero enfin, acontinuaciòn el codigo referente al caso:

Tabla Mysql:
Código PHP:
Ver original
  1. CREATE TABLE IF NOT EXISTS `gym`.`clientes` (
  2.   `idcliente` INT NOT NULL AUTO_INCREMENT,
  3.   `tipo` VARCHAR(50) NOT NULL,
  4.   `numero` VARCHAR(50) NOT NULL,
  5.   `nombre` VARCHAR(50) NOT NULL,
  6.   `apellido` VARCHAR(50) NOT NULL,
  7.   `telefono` VARCHAR(45) NULL,
  8.   `celular` VARCHAR(45) NULL,
  9.   `correo` VARCHAR(45) NULL,
  10.   `nacimiento` DATE NOT NULL,
  11.   `ocupacion` VARCHAR(45) NOT NULL,
  12.   `convenio` VARCHAR(50) NULL,
  13.   `inscripcion` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  14.   PRIMARY KEY (`idcliente`))
  15. ENGINE = InnoDB;

Clase Clientes Actualizar:
Código PHP:
Ver original
  1. function actualizar
  2. ($tipoid,$numero,$nombre,$apellido,$telefono,$celular,$correo,$nacimiento,$ocupacion,$convenio,$inscripcion){
  3.  
  4. if($this->con->conectar()==true){
  5.  
  6. return mysql_query("UPDATE clientes SET tipo=$tipoid , numero=$numero , nombre=$nombre , apellido=$apellido , telefono=$telefono , celular=$celular , correo=$correo, nacimiento=$nacimiento , ocupacion=$ocupacion , convenio=$convenio , inscripcion=$inscripcion WHERE idcliente =".$id);
  7.         }
  8.     }
Este es el còdigo donde se utiliza la clase:
Código PHP:
Ver original
  1. <?php
  2. $id=$_GET['id'];
  3. $idinscripcion=$_GET['idinscripcion'];
  4. $idnumero=$_GET['idnumero'];
  5.  
  6.  
  7. if(isset($_POST['formulario'])){
  8.   include('clases/clientes.class.php');
  9.   $objCliente=new Cliente;
  10.  
  11.   $idcliente=$id;
  12.   $tipoid= htmlspecialchars(trim($_POST['inptipo']));
  13.   $numero = $_POST['inpnumero'];
  14.   $nombre = htmlspecialchars(trim($_POST['inpnombre']));
  15.   $apellido = htmlspecialchars(trim($_POST['inpapellido']));
  16.   $telefono=$_POST['inptelefono'];
  17.   $celular= $_POST['inpcelular'];
  18.   $correo=htmlspecialchars(trim($_POST['inpcorreo']));
  19.   $nacimiento=$_POST['inpnacimiento'];
  20.   $ocupacion = htmlspecialchars(trim($_POST['inpocupacion']));
  21.   $convenio = htmlspecialchars(trim($_POST['inpconvenio']));
  22.   $inscripcion=$idinscripcion;
  23.  
  24.  
  25.  
  26.  
  27. if ( $objCliente->actualizar($tipoid,$numero,$nombre,$apellido,$telefono,$celular,$correo,$nacimiento,$ocupacion,$convenio,$inscripcion) == true){
  28.     //echo 'Datos guardados';
  29.     //header('location:indexcoordinador.php');
  30.     ?>
  31.         <script>
  32.         //un alert
  33.         window.alert("Datos Actualizados Correctamente")
  34.          
  35.         location.href = 'infocliente.php?id=<?php echo $id ?>&idnumero=<?php echo $idnumero ?>';
  36.        
  37.         </script>
  38.   <?php
  39.   }else{
  40.    
  41.     echo 'Se produjo un error. Intente nuevamente' .mysql_error();
  42.     ?>
  43.         <script>
  44.         //location.href="verconvenios.php"
  45.         </script>
  46.   <?php
  47.   }
  48. }else{
  49.   if(isset($_GET['id'])){
  50.    
  51.     include('clases/clientes.class.php');
  52.     $objCliente2  = new Cliente;
  53.     $consulta2 = $objCliente2->mostrar_cliente($id);
  54.     $convenio = mysql_fetch_array($consulta2);
  55.    
  56.  
  57. ?>

De antemano muchas gracias por sus aportes y sugerencias!!!
  #10 (permalink)  
Antiguo 11/08/2015, 08:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

Pues aqui mismo tienes el error, a simple vista: Ninguna de las variables con datos que sean cadenas de texto está correctamente puesta entre apostrofos.

MySQL NO ENTIENDE PHP, ni tampoco ve las variables de PHP. Son entornos de existencia diferente.
MySQL recibe en realidad una cadena de texto que contiene una sentencia SQL, pero la sentencia SQL debe estar perfectamente formateada para MySQL, ya que la base jamás dialoga en PHP.

¿Queda claro.

Eso que haces debería tener este formato (te lo pongo en una variable para que se vea mejor la construcción de la query):
Código PHP:
Ver original
  1. $qry = "UPDATE clientes SET tipo='$tipoid',
  2.    numero=$numero ,
  3.    nombre='$nombre',
  4.    apellido='$apellido',
  5.    telefono='$telefono',
  6.    celular='$celular',
  7.    correo='$correo',
  8.    nacimiento='$nacimiento',
  9.    ocupacion='$ocupacion',
  10.    convenio='$convenio',
  11.    inscripcion='$inscripcion'
  12. WHERE idcliente = $id";
  13.  
  14. return mysql_query($qry);

Recuerda siempre: La base de datos NO entiende PHP, y NO RECIBE variables de PHP.

Nota: Esto que te paso no te asegura que ande completamente bien, porque si, por ejemplo, las fechas no están formateadas como "AAAA-MM-DD HH:MM:SS", entonces pude darte error de formato de fecha, o bien truncarte el dato o almacenarlo incorrectamente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 11/08/2015, 09:12
Avatar de Rag_Doll  
Fecha de Ingreso: julio-2015
Ubicación: Colombia
Mensajes: 20
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

Hola a Todos!!!

Ya entiendo mejor la importancia del apòstrofo y la relaciòn php-bd, aplique el codigo de gnzsoloyo y me aparece lo siguiente:

Se produjo un error. Intente nuevamenteYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 12

la linea 12 del codigo seria esta:

WHERE idcliente = $id";

luego encerrè a $id en apòstrofes y dice que los datos se actualizaron correctamente, el problema esque no actualiza, tambien coloque a $id de otras formas, por ejemplo como lo tenia: WHERE idcliente =" .$id ; y tampoco.

De antemano muchas gracias por sus aportes y la atenciòn prestada.
  #12 (permalink)  
Antiguo 11/08/2015, 10:32
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

Yo tengo una duda, la variable $id si llega hasta el método actualizar de tu clase? No deberías pasarla como argumento de la función, puede ser que por el ámbito de las variables dentro de la clase, la variable $id sea una cadena vacía. Intenta antes de hacer el update imprimir el valor de $id con var_dump a ver si está llegando el valor del id.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]
  #13 (permalink)  
Antiguo 11/08/2015, 11:09
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

Como te dice @chronos682, el tema pasa por el valor de esa variable.
Si la variable entra vacía, dispara un error de sintaxis, lo cual es lo mejor que te puede pasar, ya que te muestra que estás programando algo MAL.
Al poner esa variable (numérica) entre apóstrofos estás escondiendo un error de programación grave. Eso no se debe hacer.
Lo que tienes que mirar ahora es:

1) Quita los apostrofos que le pusiste indebidamente a esa variable.

2) Verifica dónde se está perdiendo el valor de $id. Algún error estas cometiendo por el que la variable entra nula.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 11/08/2015, 18:14
Avatar de Rag_Doll  
Fecha de Ingreso: julio-2015
Ubicación: Colombia
Mensajes: 20
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

Hola a Todos!!!

bueno, tanto chronos682 como gnzsoloyo tenian razòn, y era que la variable $id era nula, el metodo que hice no se que tan poco ortodoxo y viable pueda ser, acontinuaciòn pongo el codigo:

Código PHP:
Ver original
  1. function actualizar($idcliente,$tipoid,$numero,$nombre,$apellido,$telefono,$celular,$correo,$nacimiento,$ocupacion,$convenio,$inscripcion){
  2.         if($this->con->conectar()==true){
  3.     $qry = "UPDATE clientes SET idcliente=$idcliente ,
  4.     tipo='$tipoid',
  5.    numero='$numero' ,
  6.    nombre='$nombre',
  7.    apellido='$apellido',
  8.    telefono='$telefono',
  9.    celular='$celular',
  10.    correo='$correo',
  11.    nacimiento='$nacimiento',
  12.    ocupacion='$ocupacion',
  13.    convenio='$convenio',
  14.    inscripcion='$inscripcion'
  15. WHERE idcliente = $idcliente ";
  16. return mysql_query($qry);
  17.         }
  18.     }

lo ùnico que cambie fue una variable màs con el id, ahora, puede que sea un metodo rudimentario, si es asi, resivo criticas constructivas y consejos que me puedan brindar para mejorar, no siendo mas muchas gracias por todos sus importantes aportes y hasta la pròxima!!!
  #15 (permalink)  
Antiguo 11/08/2015, 18:25
Avatar de chronos682  
Fecha de Ingreso: febrero-2004
Ubicación: Tunja - Boyacá - Colombia
Mensajes: 627
Antigüedad: 20 años, 2 meses
Puntos: 69
Respuesta: You have an error in your SQL syntax; check the manual that corresponds to

Si, así está bien, la variable id cliente tiene el mismo valor que el id pasado por get.
__________________
Si te gustó la respuesta dale +1

HERNÁN G. SIABATO M.
[email protected]

Etiquetas: manual, mysql, sql, syntax, tabla, update
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 14:53.