Php orientado a objetos, parte 11: PDO, Guardar registros en una base de datos

Bueno, siguiendo con el tema de mi anterior posteo, Php orientado a objetos, parte 10: PDO, Conectarse a una base de datos, hoy les mostraré cómo guardar registros en una base de datos.

En primer lugar, seguiré con la misma base de datos de la vez pasada, si no viste el anterior posteo había creado una base de datos con el nombre batman, de esta forma:

CREATE DATABASE batman;

Ahora crearé una tabla para guardar los personajes de esta serie:

CREATE TABLE personaje(
 id tinyint(3) unsigned not null auto_increment primary key,
 nombre varchar(255) not null,
 descripcion text not null
)

Bueno, hasta acá nada nuevo, creé una base de datos con una sola tabla que guardará los nombres y una descripción de los personajes, y por supuesto tendrá un id o clave primaria.

Ahora, para probar mis consultas crearé dos clases. Una será una clase para conectarse a la base de datos, la misma que usé en el posteo anterior:

<?php 
 class Conexion extends PDO { 
   private $tipo_de_base = 'mysql';
   private $host = 'localhost';
   private $nombre_de_base = 'batman';
   private $usuario = 'root';
   private $contrasena = ''; 
   public function __construct() {
      //Sobreescribo el método constructor de la clase PDO.
      try{
         parent::__construct("{$this->tipo_de_base}:dbname={$this->nombre_de_base};host={$this->host};charset=utf8", $this->usuario, $this->contrasena);
      }catch(PDOException $e){
         echo 'Ha surgido un error y no se puede conectar a la base de datos. Detalle: ' . $e->getMessage();
         exit;
      }
   } 
 } 
?>

Y luego crearé una segunda clase que se encargará de todo lo referido con consultas con la tabla de personajes que se llame Personaje, en la misma carpeta de la clase Conexion. Pero antes de mostrarles el código paremos aquí.

Primero pensemos en qué propiedades va a necesitar nuestra clase Personaje. Por cada registro necesitará guardar el id, el nombre y la descripción del personaje, pero también para realizar consultas necesitará a qué tabla apuntará. Así que crearemos tres propiedades para guardar los datos de cada personaje y una constante donde guardará el nombre de la tabla. Probemos de esta forma:

<?php
 require_once 'Conexion.php';
 class Personaje {
    private $id;
    private $nombre;
    private $descripcion;
    const TABLA = 'personaje';
    public function __construct($nombre, $descipcion, $id=null) {
       $this->nombre = $nombre;
       $this->descripcion = $descipcion;
       $this->id = $id;
    }
 }
?>

Ok, echemos un vistazo a esta clase. En primer lugar, importé la clase Conexion, ya que más adelante tendré que hacer consultas a la base y necesitaré mucho de la misma. Luego creé tres propiedades para guardar los datos de cada personaje y una constante con el nombre de la tabla. Y por último creé un constructor donde tendré que setear el valor de las propiedades. Si se han fijado bien, el último parámetro, $id, es un parámetro que por defecto es null, esto significa que en el momento de crear el constructor si yo no ingreso ese último parámetro tomará ese valor, nulo.  Esto se debe a que no siempre el id tendrá un valor definido, por ejemplo, si yo estoy creando un nuevo usuario no ingresaré el valor del id ya que eso será auto incrementable y el valor lo recuperaré una vez insertado el registro.

Continuemos, necesitaremos un método que nos permita insertar y modificar datos en la tabla personaje, para ello crearemos un método llamado guardar(), que nos servirá para insertar y modificar registros. Para ello crearemos un objeto de la clase Conexion que por medio de los métodos que heredó de la clase PDO podrá realizar  esto. La clase Personaje ahora quedaría así:

<?php
 require_once 'Conexion.php';
 class Personaje {
   private $id;
   private $nombre;
   private $descripcion;
   const TABLA = 'personaje';
   public function getId() {
      return $this->id;
   }
   public function getNombre() {
      return $this->nombre;
   }
   public function getDescripcion() {
      return $this->descripcion;
   }
   public function setNombre($nombre) {
      $this->nombre = $nombre;
   }
   public function setDescripcion($descripcion) {
      $this->descripcion = $descripcion;
   }
   public function __construct($nombre, $descipcion, $id=null) {
      $this->nombre = $nombre;
      $this->descripcion = $descipcion;
      $this->id = $id;
   }
   public function guardar(){
      $conexion = new Conexion();
      if($this->id) /*Modifica*/ {
         $consulta = $conexion->prepare('UPDATE ' . self::TABLA .' SET nombre = :nombre, descripcion = :descripcion WHERE id = :id');
         $consulta->bindParam(':nombre', $this->nombre);
         $consulta->bindParam(':descripcion', $this->descripcion);
         $consulta->bindParam(':id', $this->id);
         $consulta->execute();
      }else /*Inserta*/ {
         $consulta = $conexion->prepare('INSERT INTO ' . self::TABLA .' (nombre, descripcion) VALUES(:nombre, :descripcion)');
         $consulta->bindParam(':nombre', $this->nombre);
         $consulta->bindParam(':descripcion', $this->descripcion);
         $consulta->execute();
         $this->id = $conexion->lastInsertId();
      }
      $conexion = null;
   }
 }
?>

Ok, analicemos los cambios. En primer lugar agregué los métodos getters y setters que me estaban faltando, luego creé un método guardar() que primero crea un objeto Conexion, para así luego por medio de ese objeto poder conectarse a la base de datos:

$conexion = new Conexion();

Luego pregunté por el valor del id mediante un if, si el valor es cualquier cosa que no sea 0, false o null entonces entrará en el lado verdadero del condicional. Esto sirve para indicarle a nuestro método si tendrá que hacer un update o un insert, si el valor del id es algo significa existe un id, por ende se está modificar un usuario con ese valor, de lo contrario se está intentando insertar un usuario nuevo.

Analicemos el lado verdadero del condicional, osea el update:

Primero escribimos la consulta que modificará los datos del usuario:

$consulta = $conexion->prepare('UPDATE ' . self::TABLA .' SET nombre = :nombre, descripcion = :descripcion WHERE id = :id');

Como ven creamos un nuevo objeto $consulta, que nos devuelve el método prepare(). Aquí es donde se define la consulta que se está haciendo en la base.

Luego por medio del método bindParam() agregamos los valores de la consulta, por ejemplo :nombre será el valor de la propiedad $nombre:

$consulta->bindParam(':nombre', $this->nombre);
$consulta->bindParam(':descripcion', $this->descripcion);
$consulta->bindParam(':id', $this->id);

Y finalmente ejecutamos la consulta:

$consulta->execute();

El lado falso del if, osea el que sirve para insertar un nuevo registro es muy parecido al del update, sólo cambia la consulta (obviamente) y que no debe pasarle el valor del id, porque como dijimos antes, en el INSERT no hay id, sino que se auto incrementa en la consulta.

Por eso al finalizar de ejecutar la consulta se recupera el id que se acaba de insertar:

$this->id = $conexion->lastInsertId();

El método lastInsertId() me permite recuperar la última clave primaria o id insertada en la base de datos, es un método de la clase PDO.

Finalmente igualo el objeto $conexion a null para cerrar la conexión:

$conexion = null;

Ahora para comprobar que todo ha salido bien probaremos crear  un objeto Personaje para insertar un registro en la base de datos:

<?php
 require_once 'clases/Personaje.php';
 $persona = new Personaje('Batman', 'Encapuchado, disfrazado de murciélago que sale por las noches a combatir el mal.', 1);
 $persona->guardar();
 echo $persona->getNombre() . ' se ha guardado correctamente con el id: ' . $persona->getId();
?>

Al no ingresarle en el constructor el tercer parámetro no obligatorio $id el método guardar() interpretará que se está intentado insertar un nuevo registro. Prueben ejecutar este script y verán que se ha insertado un nuevo registro en la tabla personaje.

En la próxima ocasión veremos cómo hacer select en la base de datos.

Saludos!

Anterior: Php orientado a objetos, parte 10: PDO, Conectarse a una base de datos

Siguiente: Php orientado a objetos, parte 12: PDO, Buscar registros en una base de datos


51 Respuestas a “Php orientado a objetos, parte 11: PDO, Guardar registros en una base de datos”

  1. Muy buenas noches, antes que nada se agradece el esfuerzo, es un buen aporte para los que nos vamos introducimos en el tema.
    Mi pregunta:Utilice del metodo “GUARDAR” la parte “INSERTAR”, pero me produce un error en la linea “$consulta->execute();”

    Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp\www\sitio2013\Docentes.php on line 117

    A que se debe este error? debo pasarle los datos a ese metodo? porque no me guarda los datos.
    Desde ya muchas gracias.

    1. Iván, cómo estás.

      Porque lo que alcanzo a entender, está faltando algún valor en la consulta.

      Fijate cuando le pasás los datos de entrada con bindParam(), que no te esté faltando ninguno.

      Cualquier cosa mandame un mail con tu clase Docentes.php.

      Saludos.

      1. Hola Fernando.
        Te cuento mire el codigo pero no logre solucionar el problema, sigo teniendo el mismo problema.
        Cuál es tu correo? para poder mandarte el archivo Docente.php para no pegar todo el codigo completo en un comentario.
        Desde ya muchas gracias.

        1. Mandame la clase a fernandoggaitan(gmail)

          No escribo el correo completo para evitar spam.

          Saludos!

  2. Hola fernando, primero que todo felicitarte por este excelente tutorial. Segundo me podrías ayudar en como sería si inserto mis datos desde un formulario?.He intentando declarando mis variables, ejemplo :
    $nombreUsuario = $_POST[‘nombreUsuario’];
    pero no me resulta, los datos no quedan registrados. Soy novata autodidacta en el tema. Desde ya muchas Gracias por la ayuda.

    1. Angélica, cómo estás.

      El código parece estar correcto. Lo único que se me ocurre en este momento es que no estén llegando las variables POST, fijate si el formulario de donde se mandan tiene el atributo method y el valor ‘post’.

      También, mediante la función var_dump($_POST) podés verificar si están llegando los datos.

      Sino, enviame un mail con el código o agregame al chat de gmail, y te doy una mano.

      Saludos!

  3. Hola, primero una felicitacion por tu post
    No puedo hacer que las variables que tengo en otro script lleguen a la clase donde guardo los datos.
    no guarda nada y no me imprime ningun error
    espero y me puedas ayudar.

    1. Miguel, la verdad es que debería ver el código para ayudarte. Si querés mandármelo por correo, y veo si te puedo dar un mano.

      Saludos!

  4. Buenas tardes, muchas gracias por este tutorial. Al principio lo hice de esta forma:

    en index.php tengo esto

    1. Andrew, por favor enviame el código a mi casilla de correo con el archivo adjunto, porque acá en el blog se complia.

      Mi dirección de email es: fernandoggaitan(gmail)

      Saludos.

  5. Hola que tal, tengo una duda, como le hacemos para que en lugar de pasar los valores directamente, los pasemos por medio de un form en otro página al momento de hacer el insert, saludos 🙂

    1. No entiendo la pregunta.

      Vos mandás datos de un form, los recuperás con $_POST y esos son los datos, que tenés que pasarle la consulta.

  6. Muy buen trabajo !!
    Tengo una duda… disculpa mi ignorancia pero creo k no estas utilizando los getters and setters o si los utilizas explicamelo por favor… la verdad k soy nuevo en php y pensaba que al realizar la POO seria similar como en JAVA ya que en JAVA por ejemplo yo fijo todos los parametros a guardar con los setters y luego llamo a mi metodo guardar pero solo asi
    sp.setNombres(txt_nombres.gettext);
    sp.setApellidos(txt_apellidos.gettext);
    sp.guardar(this.sp.getPersona);

    Estoy verdaderamente confundido y t estaria muy agradecido si me pudieras aclarar un poco esto…
    GRACIAS

    1. Sí, los estoy usando.

      Propiedades:

      private $id;
      private $nombre;
      private $descripcion;

      Métodos:

      public function getId() {
      return $this->id;
      }
      public function getNombre() {
      return $this->nombre;
      }
      public function getDescripcion() {
      return $this->descripcion;
      }
      public function setNombre($nombre) {
      $this->nombre = $nombre;
      }
      public function setDescripcion($descripcion) {
      $this->descripcion = $descripcion;
      }

      PDO sólo es una librería que permite conectar PHP con una base de datos (en este caso MySQL) y hacer consultas, pero las consultas las tenés que escribir vos con código SQL. Lo que quizás vos te estás confundiendo es con un ORM.

      Ahí tenés:

      Eloquent (De Laravel)
      Doctrine
      Propel (De Symfony)
      PhpActiveRecord

      Esos sí te permiten desligarte del código de base de datos y manipular registros con métodos ya pre construidos, trabajando de esa forma que vos decís.

      Saludos!

  7. Ante todo muy completa tu explicacion de php. Pero tengo una duda, cuando decis que crearas un nuevo objeto Persona para probar la clase, utilizas:
    $persona = new Personaje(‘Batman’, ‘Encapuchado, disfrazado de murciélago que sale por las noches a combatir el mal.’, 1);

    El ultimo parametro 1, en la funcion guardar entra por el lado de MODIFICAR. Es asi?

    1. Exacto, vos tenés una propiedad que guarda (o no) el id. Si ese id es null, osea que no existe, es porque el objeto pertenece a un registro nuevo, osea a insertar. De lo contrario va a intentar modificar un registro con el id correspondiente.

      Saludos!

  8. Hola Buen Día Fernando, y Felicidades por éste blog me ha enseñado mucho. Mi pregunta es: he realizado todos los ejercicios tanto en mi web local como en una página web, pero desde que se declararon las extenciones PDO, en la página web la página no trabaja, ¿Cómo se declaran o se activa las clases PDO en una página WEB. Gracias

    1. Ok, en realidad pueden ser varias cosas.

      Primero, tenés que comprobar si la versión que se usa en el host o servidor que aloja tu sitio web tiene la versión 5 de PHP o superior. De ser así, si tenés acceso al administrador del php.ini tenés que habilitar la extensión como lo indica en la página oficial de PHP:

      http://php.net/manual/es/pdo.installation.php

      Si tu hosting no te permite eso, entonces vas a tener que contactarte, y pedirles que te lo habiliten.

      Saludos!

  9. Buenos días fernando, quisiera preguntarte si la class personaje puede ir en el mismo archivo de la conexión?…
    Muchas gracias por tu pronta respuesta y te felicito por tu blog estoy aprendiendo demasiado con este tema.

    1. No, no es buena idea hacer eso.

      Porque suponete que vos tenés otra clase, que también se va a conectar con la base de datos. Entonces vas a tener que repetir todo el código de la clase Conexión, y si cambia algo en el futuro, tenés que cambiarlo en todos los archivos.

      Saludos!

  10. Hola fernando, te cuento el inconveniente que tuve a la hora de aplicar tu manera de hacerlo a un ABM de productos cuyos atributos solo se diferencian en precio por descripcion con respecto a Personajes.
    El problema está en que cuando hardcodeo un alta tal cual vos, me lanza el mensaje de exito y con el id en 0 pero no impacta en la base de datos.
    Cual puede ser el problema? Muchas gracias

  11. Hola, muchas gracias por su aporte.
    He programado con php y el driver mysql clásico, pero es la primera vez que lo hago con pdo.
    Tengo las clases correspondientes a mis modelos, con todos los metodos, getters, setters, constructores y crud.
    Mi pregunta es, desde el formulario, cómo los llego a ingresar? cómo construyo el objeto y guardo? Es decir, en el action del formulario debe apuntar hacia la misma clase del modelo y ahí iniciar las variables con get o post? o el enfoque es otro y hay otra clase intermedia que se encarga de esto separada de la lógica?
    Muchas gracias.

  12. Hola Fernando. Muy bueno tu aporte. Una consulta.. por lo que entiendo tanto en el INSERT como en el UPDATE tenes que pasar siempre todos los campos?, es decir, si no le pasas un campo en el update te lo modifica igual y te pone un valor en blanco. Por ejemplo: Si en el update le paso el id y la descripción (y no le paso nada en el campo nombre), el campo nombre se actualiza con un blanco. ¿Es así? Gracias

    1. Sí y no. En realidad, en el ejemplo que yo hice, tanto en el INSERT como en el UPDATE se mandan siempre los datos. Sin embargo, si te fijás en la publicación que le sigue a esta:

      Php orientado a objetos, parte 12: PDO, Buscar registros en una base de datos/

      La clase tiene un método que se llama buscarPorId().

      Ese método te llena todos los atributos del objeto con los datos de ese ID. Por tanto no tenés que enviar los datos nuevamente, porque existen internamente en el objeto.

      Para modificar los datos que vos querés, tenés que usar los métodos setNombre() y setDescripcion().

      Osea suponete que vos tenés un registro que el nombre es ‘pepito’ y la descripción es ‘Hola’, y el ID es 35.

      Cuando recuperes ese dato con el método

      $personaje = Personaje::buscarPorId(35);

      Ese objeto se va a cargar con esos datos.

      Si hacés $personaje->guardar(), va a hacer un UPDATE con los datos que hay en ese momento, osea con los mismos datos.

      Pero si antes de guardar, llamas al método setNombre():

      $personaje->setNombre(‘Cachito’);
      $personahe->guardar();

      Sólo se va cambiar el nombre, los otros datos van a quedar igual.

      Fijate mejor la publicación que le sigue, y lo vas a entender mejor.

      Saludos!

  13. Hola te comento tengo una página finalizar a la cual le tengo que guardar los datos en una base de datos, pero los datos que se van guardando lo hacen en una variable de sesión llamada $_Session[‘persona’]. Pero cuando quiero guardarlo en la base de datos el código no me arroja errores pero tampoco me guarda los datos, así que no sé que podrá ser?
    Espero que me puedas orientar a qué se deberá dicho error. Gracias.

    1. Deberías darme más información.

      Si querés mandame tu código a fernandoggaitan (gmail)

      Saludos!

  14. Bueno felicidades exelente tutorial me gustaria saber si me puedes ayudar ya que mi codigo no guarda ni arroja ningun error y me he quebrado la cabeza buscando que es te dejo mi archivo insert.php

    de antemano gracias por la ayuda
    cr_id;
    }
    public function getletra(){
    return $this->letra;
    }
    public function getCrMail(){
    return $this->cr_mail;
    }
    public function getSala(){
    return $this->sala;
    }
    public function setletra($letra){
    $this->letra = $letra;
    }
    public function setMail($cr_mail){
    $this->cr_mail = $cr_mail;
    }
    public function setSala($sala){
    $this->sala = $sala;
    }

    public function __construct($letra,$cr_mail,$sala,$cr_id=null) {/*$cr_id para recuperar los valores autoincrementales y no ingresarlos*/
    $this->letra = $letra;
    $this->cr_mail = $cr_mail;
    $this->sala = $sala;
    $this->cr_id = $cr_id
    }
    public function guardar(){
    $conexion = new MysqlConexion();
    if($this->cr_id) /*Modifica*/ {
    $consulta = $conexion->prepare(‘UPDATE ‘ . self::TABLA .’ SET letra = :letra, cr_mail = :cr_mail, sala = :sala WHERE cr_id = :cr_id’);
    /*Vinculamos los parámetros al nombre de variable especificada*/
    $consulta->bindParam(‘:letra’, $this->letra);
    $consulta->bindParam(‘:cr_mail’, $this->cr_mail);
    $consulta->bindParam(‘:sala’, $this->sala);
    $consulta->bindParam(‘:cr_id’, $this->cr_id);
    $consulta->execute();
    }else /*Inserta*/ {
    $consulta = $conexion->prepare(‘INSERT INTO ‘ . self::TABLA .’ (letra, cr_mail, sala) VALUES(:letra, :cr_mail,:sala)’);
    $consulta->bindParam(‘:letra’, $this->letra);
    $consulta->bindParam(‘:cr_mail’, $this->cr_mail);
    $consulta->bindParam(‘:sala’, $this->sala);
    $consulta->pg_execute();
    $this->cr_id = $conexion->lastInsertId();
    }
    $conexion = null;
    }
    }

    ?>

  15. Falto este pedazo no se por que pero te lo envío
    private $cr_id;
    private $letra;
    private $cr_mail;
    private $sala;
    const TABLA = ‘cursos’;

    public function getCrId(){
    return $this->cr_id;
    }

  16. Buenas, estoy empezando con PHP POO estoy haciendo pruebas con una base de datos y no me funciona el class zona y no encuentro el porque, ¿me puedes echar una mano?

    la conexion es tal y como tú la has indicado:
    class Conexion extends PDO {
    private $tipo_de_base = ‘mysql’;
    private $host = ‘localhost’;
    private $nombre_de_base = ‘zul’;
    private $usuario = ‘a’;
    private $contrasena = ”;

    public function __construct() {
    //Sobreescribo el método constructor de la clase PDO.
    try{
    parent::__construct($this->tipo_de_base.’:host=’.$this->host.’;dbname=’.$this->nombre_de_base, $this->usuario, $this->contrasena);
    }catch(PDOException $e){
    echo ‘Ha surgido un error y no se puede conectar a la base de datos. Detalle: ‘ . $e->getMessage();
    exit;
    }
    }
    }

    seguidamente esta el class zona, donde esta el metodo para insertar en la base de datos:
    require_once ‘conexion.php’;

    class Zona {
    private $codZona;
    private $nomZona;
    const TABLA = ‘zona’;

    public function __construct ($codZona, $nomZona) {
    $this->codZona = $codZona;
    $this->nomZona = $nomZona;
    }

    public function get_codZona () {
    return $this->codZona;
    }

    public function get_nomZona () {
    return $this->nomZona;
    }

    public function set_nomZona ($nomZona) {
    $this->nomZona = $nomZona;
    }

    public function guardarZona(){
    $conexion = new Conexion();

    if($this->codZona) /*Modifica*/ {
    $consulta = $conexion->prepare(‘UPDATE ‘ . self::TABLA .’ SET nomZona = :nomZona WHERE codZona = :codZona’);
    $consulta->bindParam(‘:nomZona’, $this->nomZona);
    $consulta->bindParam(‘:codZona’, $this->codZona);
    $consulta->execute();
    }else /*Inserta*/ {
    // He realizado un pequeño cambio para probar haber si asi funciona
    $consulta = $conexion->prepare(“INSERT INTO zona(codZona, nomZona) VALUES(:codZona,:nomZona)”);
    $consulta->bindParam(‘:codZona’, $this->codZona);
    $consulta->bindParam(‘:nomZona’, $this->nomZona);
    $consulta->execute();
    }
    $conexion = null;
    }
    }

    Y por último donde se ejecuta que me funciona el echo por lo que la importación de tabla y valores funciona, por eso decia antes que lo que no funciona es el metodo guardarZona.
    La conexion no da error.

    require_once ‘classes/conexion.php’;
    require_once ‘classes/zona.php’;

    //obtenemos el archivo .csv
    $tipo = $_FILES[‘archivo’][‘type’];

    $tamanio = $_FILES[‘archivo’][‘size’];

    $archivotmp = $_FILES[‘archivo’][‘tmp_name’];

    //cargamos el archivo
    $lineas = file($archivotmp);

    //inicializamos variable a 0, esto nos ayudará a indicarle que no lea la primera línea
    $i=0;

    //Recorremos el bucle para leer línea por línea
    foreach ($lineas as $linea_num => $linea)
    {
    //abrimos bucle
    /*si es diferente a 0 significa que no se encuentra en la primera línea
    (con los títulos de las columnas) y por lo tanto puede leerla*/
    if($i != 0) {
    //abrimos condición, solo entrará en la condición a partir de la segunda pasada del bucle.
    /* La funcion explode nos ayuda a delimitar los campos, por lo tanto irá
    leyendo hasta que encuentre un ; */
    $datos = explode(“;”,$linea);

    //Almacenamos los datos que vamos leyendo en una variable
    $codZona = trim($datos[0]);
    $nomZona = trim($datos[1]);

    $zona = new Zona( $codZona, $nomZona);
    $zona->guardarZona();
    echo $zona->get_nomZona() . ‘ se ha guardado correctamente con el codigo: ‘ . $zona->get_codZona();//guardamos en base de datos la línea leida
    echo ”;
    }
    $i++;
    }

      1. Buenas
        Lo que creo que falla es el metodo guardarZona.
        Gracias por echarme una mano.
        Un saludo

        1. Yo errores no veo, no sé si realmente los nombres de la columna de tu tabla coinciden con los que escribiste en el código, pero para estar más seguro hacé la siguiente prueba:

          Antes de:

          $conexion = null;

          Escribí la siguiente línea:

          var_dump($consulta->errorInfo());

          Y de haber errores de sintaxis en la base de datos, te lo va a devolver por ahí.

          Saludos!

          1. Ya me gustaria, he echo lo que me has dicho. NO me da errores de sintaxis, pero no me actualiza la base de datos.

            Un saludo

    1. HOla veo que el post data del 2017. Asumo que ya lo corregiste…
      Bueno… en efecto todo bien.. asta que vi algo que andaba mal…. y no.. no es ” ; ” mas bien es un echo que en realidad no se por que anda ahí.. xd o a lo mejor te olvidaste de cerrarlo al final de i++ XD

      echo ”;
      }
      $i++;
      }

      asumo que ese echo con una camilla doble… hace comentar todo lo que sigue.. lo que puedo decir.. que tu función no se ha cerrado… eso.. y todo lo demás… lo desmadra…
      Pero en fin.. como dije antes… asumo ya lo habrás corregido xd…

  17. Hola muchas gracias por la informacion muy util me funciona la conexion pero no inserta los datos en mi base de datos use ese codigo var_dump($consulta->errorInfo()); para que que sucedia y me sale esto
    array(3) { [0]=> string(5) “3D000” [1]=> int(1046) [2]=> string(20) “No database selected” }
    los datos los mando desde un otro archivo php que recoge de un formulario a traves de un post y el ID de la tabla no lo toque por que ya esta en auto increment pero no guarda nada en la tabla.

    1. Evidentemente no está conectando bien en la base de datos. Si querés mandame el código por correo y me fijo qué puede ser. fernando.g.gaitan(gmail)

      Saludos!

  18. el ejemplo me parece que no guarda en la base de datos.
    apesar de retornar el echo de que si sucedio al revisar la base de datos esta vacia.

  19. Hola. veo que este post data desde el 2014 xd… en fin…
    Mi consulta es, ¿como seria, en mi clase conexión, tener también las funciones de las querys y a la vez… tener el __destruct() implementando cerrando las querys?; esto con la finalidad de ahorrarme código en las demás clases… como x ejem. en mi clase persona, trabajador, producto…
    Mi idea es que las demás clases no se congestione con código repetitivo en cuestión de generar consulta o procedimientos almacenados…
    y preguntarte también si esta idea seria factible a la hora de programar… xd