Error con insert en php mysql

Tengo un problema con este código, espero ser claro:
Tengo un formulario que carga datos de un registro, si el registro existe, carga los datos al formulario, y si no existe registro pues simplemente muestra el formulario vacío, al darle enviar datos pasa al PHP del problema, en donde evalúa si ya existía registro hace un UPDATE y si no existe registro hace un INSERT
mi problema especifico es que el UPDATE lo hace sin problema pero cuando se trata de insertar un nuevo registro no marca ningun error pero tampoco hace la inserción del registro.

Supongo que el error se encuentra en esta parte del código

//inicia comprobacion
$registros = mysql_num_rows(mysql_query("Select * from ctrlesc_padres where id_padre like '$id_padre'"));

if ($registros==0)
{
$camino="Alta";
mysql_free_result();
Mysql_query("INSERT INTO ctrlesc_padres (id_padre, nombre, fecha_nac, RFC, CURP, email, celular, domicilio_calle, domicilio_numext, domicilio_numint, colonia, cp, municipio, estado, profesion, nivel_estudios, tel_trabajo, tel_casa, NombreM, fechaNacM, RFCM, CURPM, emailM, celularM, telTrabajoM, TelCasaM, domCalleM, domNumExM, domNumIntM, coloniaM, cpM, municipioM, estadoM, profesionM, nivelEstudiosM, password, idFamilia, familia)
VALUES
('$id_padre', '$nombre','$fecha_nac','$RFC','$CURP','$email','$celular','$domicilio_calle','$domicilio_numext','$domicilio_numint','$colonia','$cp,$municipio','$estado','$profesion','$nivel_estudios','$tel_trabajo','$tel_casa','$NombreM','$fechaNacM','$RFCM','$CURPM','$emailM','$celularM','$telTrabajoM','$TelCasaM','$domCalleM','$domNumExM','$domNumIntM','$coloniaM','$cpM','$municipioM','$estadoM','$profesionM','$nivelEstudiosM','$password','$idFamilia', '$familia')");
}
else
{
$camino="Cambio";
mysql_query("UPDATE ctrlesc_padres SET nombre='$nombre',fecha_nac='$fecha_nac',RFC='$RFC',CURP='$CURP',email='$email',celular='$celular', domicilio_calle='$domicilio_calle',domicilio_numext='$domicilio_numext',domicilio_numint='$domicilio_numint', colonia='$colonia',cp='$cp',municipio='$municipio',estado='$estado',profesion='$profesion', nivel_estudios='$nivel_estudios',tel_trabajo='$tel_trabajo',tel_casa='$tel_casa', NombreM='$NombreM',fechaNacM='$fechaNacM', RFCM='$RFCM',CURPM='$CURPM',emailM='$emailM',celularM='$celularM',telTrabajoM='$telTrabajoM', telCasaM='$telCasaM',domCalleM='$domCalleM',domNumExM='$domNumExM', domNumIntM='$domNumIntM', coloniaM='$coloniaM',cpM='$cpM', municipioM='$municipioM',estadoM='$estadoM',profesionM='$profesionM',nivelEstudiosM='$nivelEstudiosM'
WHERE id_padre like '$id_padre'");
}

// termina comprobacion

El campo llave es id_padre

1 Respuesta

Respuesta

Me pasa a menudo, y es porque el servidor web da menos información acerca de los errores de manejo de la BBDD que MySQL.

Lo que hago yo es abrir MySQL Workbench y reproducir la consulta que da error, normalmente MySQL da algo más de información acerca del error y de porqué se produce.

Si no quieres instalar Workbench, prueba con una consola.

Los errores más comunes en un Insert suelen producirse porque el número de campos de la lista de campos no coincide con el de argumentos en Values, o bien por inconsistencia de tipos de datos (intentas escribir un String en un campo INT, o bien el String es más largo que el campo varchar) o problemas similares.

Lo que no entiendo es porque usas la comilla simple para cada uno de los campos. Las comillas se usan para delimitar datos que no son integer. Sin ánimo de criticar, usas una sintaxis un poco confusa y complicada de leer.

Prueba a ponerlo asi:

$sql = "INSERT INTO nombre_tabla (campo1, campo2, campo3, ... , campoN) VALUES (" .

"'' . $valor1 . "', " .

"" . $valor2 . ", " .

"'" . $valor3 . "', " ......

"'" . $valorN . "')";

Y después ejecutas la sentencia $sql. No se puede ver por el tipo de letra, pero en los campos que no son integer hay una comilla simple para delimitar inicio y fin de campo.

¡Muchas Gracias por tu respuesta Tomás!
me parece que es por incongruencia entre longitud de texto en el form con el del campo en la base de datos lo intentaré y te digo como me va
también tomo en cuenta tus sugerencias para hacer más legible mi código.
Gracias! 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas