Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] error al insertar a db

Estas en el tema de error al insertar a db en el foro de PHP en Foros del Web. Hola estoy realizando una inserción a DB utilizando dos clases y pasando parámetros, al ejecutar me dice Error al crear registro , necesito ayuda para ...
  #1 (permalink)  
Antiguo 11/05/2014, 17:50
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
error al insertar a db

Hola estoy realizando una inserción a DB utilizando dos clases y pasando parámetros, al ejecutar me dice Error al crear registro, necesito ayuda para solucionar este error gracias de antemano.

Este es mi codigo

clase Conexion.php

Código PHP:
<?php

class Conexion {

    public static function 
Ejecutar($consulta) {
        try {
            
$db = new PDO("mysql:host=localhost;dbname=sisupes""root""");
            
            if (
$db->query($consulta)) {
                echo 
"<p>Registro creado correctamente.</p>\n";
            } else {
                echo 
"<p>Error al crear el registro.<p>\n";
            }
            
$db null;
        } catch (
PDOException $e) {
            echo 
'Error al conectarse con la base de datos: ' '<br>' $e->getMessage();
            die();
        }
    }

}
clase db_asignaturas.php

Código PHP:
include 'conexion/Conexion.php';

$_accion $_POST['accion'];

if (
$_accion == 'insertar') {
    
$algo = new db_aignatura();
}

class 
db_aignatura {

    function 
__construct() {
        
$this->Insertar();
    }

    function 
Insertar() {
        
        
$consulta "INSERT INTO asignatura (CODIGO_CARRERA, CODIGO_CARRERA, NOMBRE_ASIGNATURA,UNIDADES_VALORATIVAS) VALUES ('" $_POST['codigo_carrera'] . "', '" $_POST['codigo_asignatura'] . "', '" $_POST['nombre_asignatura'] . "','" $_POST['unidades_valorativas'] . "')";

        
Conexion::Ejecutar($consulta);
        
        
    }


  #2 (permalink)  
Antiguo 11/05/2014, 18:27
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: error al insertar a db

Por lo menos deberías extender la toma de datos del error. No alcanza con saber que ocurrió algo malo, necesitas saber qué es lo que sucedió en la base, y para eso existen formas:

Intentemos esto:
Código PHP:
Ver original
  1. <?php
  2.  
  3. class Conexion {
  4.  
  5.     public static function Ejecutar($consulta) {
  6.         try {
  7.             $db = new PDO("mysql:host=localhost;dbname=sisupes", "root", "");
  8.            
  9.             if ($db->query($consulta)) {
  10.                 echo "<p>Registro creado correctamente.</p>\n";
  11.             } else {
  12.                 echo "<p>Error al crear el registro.<p>\n";
  13.  
  14.                 // verifiquemos qué pasó...
  15.                 echo $db->errorInfo();
  16.             }
  17.             $db = null;
  18.         } catch (PDOException $e) {
  19.             echo 'Error al conectarse con la base de datos: ' . '<br>' . $e->getMessage();
  20.             die();
  21.         }
  22.     }
  23.  
  24. }
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/05/2014, 18:33
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: error al insertar a db

Me lanzo este error

Notice: Array to string conversion in C:\xampp\htdocs\SIS_UPES\libs\conexion\Conexion.ph p on line 13
Array

La linea 13 corresponde al echo del error
  #4 (permalink)  
Antiguo 11/05/2014, 19:52
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: error al insertar a db

Eso es porque errorInfo() devuelve un array.
Veamos algo mejor:
Código PHP:
Ver original
  1. <?php
  2.  
  3. class Conexion {
  4.  
  5.     public static function Ejecutar($consulta) {
  6.         try {
  7.             $db = new PDO("mysql:host=localhost;dbname=sisupes", "root", "");
  8.            
  9.             if ($db->query($consulta)) {
  10.                 echo "<p>Registro creado correctamente.</p>\n";
  11.             } else {
  12.                 echo "<p>Error al crear el registro.<p>\n";
  13.  
  14.                 // verifiquemos qué pasó...
  15.                 print_r($db->errorInfo());
  16.             }
  17.             $db = null;
  18.         } catch (PDOException $e) {
  19.             echo 'Error al conectarse con la base de datos: ' . '<br>' . $e->getMessage();
  20.             die();
  21.         }
  22.     }
  23.  
  24. }
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 11/05/2014, 20:39
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: error al insertar a db

gracias ahora me da este error


Array ( [0] => 42000 [1] => 1110 [2] => Column 'CODIGO_CARRERA' specified twice )
  #6 (permalink)  
Antiguo 11/05/2014, 20:46
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: error al insertar a db

ya solucione ese error era por mi query ahora me dice esto

Array ( [0] => 21S01 [1] => 1136 [2] => Column count doesn't match value count at row 1 )
  #7 (permalink)  
Antiguo 11/05/2014, 20:49
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: error al insertar a db

Cita:
Column 'CODIGO_CARRERA' specified twice
Bueno, es bastante obvio, ¿no te parece?
"Columna 'CODIGO_CARRERA' especificada dos veces"...

¿Qué te dice? Simplemente que escribiste mal la query... porque estás poniendo dos veces el mismo nombre de columna, y eso no puede ser:
Código MySQL:
Ver original
  1. INSERT INTO asignatura (
  2.     CODIGO_CARRERA, # Primera vez
  3.     CODIGO_CARRERA, # Segunda vez
  4.     NOMBRE_ASIGNATURA,
  5.     UNIDADES_VALORATIVAS)
  6.     '" . $_POST['codigo_carrera'] . "',
  7.     '" . $_POST['codigo_asignatura'] . "',
  8.     '" . $_POST['nombre_asignatura'] . "',
  9.     '" . $_POST['unidades_valorativas'] . "');
__________________
¿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/05/2014, 20:50
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: error al insertar a db

Cita:
Iniciado por sam03 Ver Mensaje
ya solucione ese error era por mi query ahora me dice esto

Array ( [0] => 21S01 [1] => 1136 [2] => Column count doesn't match value count at row 1 )
"Cantidad de columnas no coincide con la cantidad de valores"

Es un valor en el VALUES por cada columna en el INTO...

Sospecho que la quitaste, en lugar de indicar la correcta... ¿No es así?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 11/05/2014, 20:58
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: error al insertar a db

Gracias por la ayuda, se que son cosas simples pero soy nuevo en esto de las bases de datos y php, ya corregí los errores en mi query pero ahora me da este error.

Array ( [0] => 23000 [1] => 1452 [2] => Cannot add or update a child row: a foreign key constraint fails (`sisupes`.`asignatura`, CONSTRAINT `FK_CARRERAS_ASIGNATURAS` FOREIGN KEY (`CODIGO_CARRERA`) REFERENCES `carreras` (`CODIGO_CARRERA`)) )

sino estoy mal es porque no pedo llenar los campos que son llaves foráneas verdad?
  #10 (permalink)  
Antiguo 11/05/2014, 21: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: error al insertar a db

Eso ya es medio problema de BBDD, más que de PHP.
Estás intentando agregar un registro en una tabla que tiene definidas claves foráneas (FK) que apuntan a otras tablas, sin insertar primero los valores correspondientes en las tablas base.
Mi sugerencia es que pares allí y te pongas a leer y entender lo que es una base de datos relacional, al menos los elementos básicos.
De lo contrario te toparás con muchísimos problemas que no entenderás y te vas a pasar parchando cosas que tienes que hacer bien desde el rpincipio.

Leer: Base de Datos Relacional

Prestale especial atención al tema de las claves foráneas.

Lo siento, pero no hay un camino simple. Es un tema totalmente técnico.
__________________
¿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/05/2014, 21:16
 
Fecha de Ingreso: febrero-2014
Mensajes: 69
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: error al insertar a db

Gracias me has ayudado mucho leeré sobre bases de datos para poder continuar con mi proyecto.

Etiquetas: registro, sql
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 20:05.