diseno-web-mini-10

PDO (driver para bases de datos) – diseño web básico 10

PDO: librería todoterreno

Episodio 10 - PDO

Episodio 10 – PDO

PDO significa “PHP data objects” y es una herramienta prácticamente imprescindible para desarrollar una aplicación o web con PHP. Normalmente, la mayoría de proyectos que podemos llegar a realizar requieren de una base de datos para funcionar. Todas las bases de datos proporcionan bibliotecas o drivers para que PHP pueda trabajar con ellas. Aun así, esto puede dar problemas. ¿Qué pasa si hoy trabajamos con MySQL y mañana decidimos cambiar a otra base de datos distinta? ¿Significa eso que tenemos que reescribir una gran parte de nuestra aplicación para adaptarla al nuevo sistema de base de datos?

Por suerte, para eso precisamente tenemos PDO, que nos proporciona una capa de abstracción sobre la base de datos que estamos usando. Dicho de otra manera, PDO nos permite trabajar de la misma manera sin importar qué base de datos estamos utilizando (PDO es compatible con más de una veintena de bases de datos distintas).

Gracias a esta útil herramienta, podemos construir desde el principio nuestra aplicación de forma robusta y con la confianza de que luego no tendremos que realizar cambios (al menos en este aspecto, ya que las aplicaciones siempre sufren cambios).

De hecho, esto es fácil de comprobar cambiando entre MySQL y MariaDB. Son dos sistemas de bases de datos que, aunque tienen nombres diferentes, actualmente son exactamente la misma cosa. MariaDB es un fork de MySQL, separación causada por la creciente avaricia de los responsables de MySQL que se han empezado a centrar en vender licencias para el uso de su tecnología, ignorando las premisas del software libre. Al haberse separado muy recientemente MariaDB, todavía no hay ninguna diferencia que señalar, aunque seguramente en el futuro las cosas cambiarán.

En cualquier caso, es destacable el hecho de que podemos intercambiar ambos sistemas de bases de datos sin provocar ningún fallo en nuestra aplicación, sin errores ni excepciones de PHP.

¿Te ha gustado? ¡Colabora en Patreon!

21 comentarios

  • jorge alberto

    ERRORSQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Host desconocido.
    me quede estancado con este error al querer hacer la conexión y ya revise todo desde el inicio y no se donde es el error

  • Hola Buenas, JavaDevOne en el video de “Curso diseño web principiantes 21 – Nombre y email únicos” me salta este error: Parse error: syntax error, unexpected ‘->’ (T_OBJECT_OPERATOR) in C:\xampp\htdocs\Prototipo\app\RepositorioUsuario.inc.php on line 105. Ese erroe me salta en esta linea: $resultado = sentencia -> fetchAll(); Como lo puedo solucionar?
    Gracias.

  • HOLA JAVA DEV ONE. MUCHAS GRACIAS POR TU APORTE CON ESTE CURSO.
    TENGO UNA PREGUNTA. INSTALE EL NETBEAN IDE 8.2 Y TODOS LOS DEMAS ELEMENTOS PARA LA REALIZACION DE LA WEB. PERO AL ABRIR NETBEAN Y DARLE A NEW PROJECT NO ME SALE LA APLICACION HTML Y YA TENGO INSTALADO JAVA8.

  • Buenas noches siguiendo los pasos del video llegue al siguiente codigo en el archivo Conexiones.inc.php :

    setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    self::$conexion -> exec(“SET CHARACTER SET utf8”);

    print ‘CONEXION_ABIERTA’;
    }
    catch (PDOException $ex) {
    print ‘ERROR: ‘ . $ex -> getMessage() . “”;
    die();
    }
    }
    }

    public static function cerrar_conexion() {
    if (isset(self::$conexion)) {
    self::$conexion = null;
    print ‘CONEXION_CERRADA’;
    }
    }

    public static function obtener_conexion() {
    return self::$conexion;
    }
    }

    El problema es que al recargar la pagina del blog me sale el siguiente error:

    ERROR: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Host desconocido.

    Te agradeceria si podes decirme donde esta el error,para poder continuar con el curso. Muchas gracias y saludos

    • Creo que falta bastante código. Veo que tienes por ahí la palabra clave “catch” pero no el “try”, con lo que no sé si te has equivocado copiando aquí el ejemplo o directamente te has saltado un montón de código…

  • JAVADEVONE, estuve viendo tu curso, y estoy expandiendo el blog, agregando la funcionalidad seguidores y me gustas ,no me gusta en la entradas.
    Que me recomiendas:
    1 crear una tabla (entidad) para seguidores que tenga solo id
    2 crear un tabla que tenga me gusta y no me gusta que serian propiedades y ademas el id del quien le puso el me gusta,y el id de la entrada.

    yo pienso que la tabla seguidores no tendria sentido, que opinas?
    gracias por tu respuesta

    • Primero, sobre los likes/dislikes: me parece más correcto y flexible hacer una tabla separada tal y como tú planteas. En esa tabla relacionarías el id del usuario, el id de la entrada y el valor de like/dislike.

      Sobre los seguidores, tiene sentido si te parece una funcionalidad necesaria de tu blog. Sería otra tabla separada donde se relacione id del usuario con el id del autor al que quiere seguir. No sería muy complicado aunque ten en cuenta que cuantas más tablas creas, más se irá ralentizando la base de datos con el paso del tiempo.

  • Hola Javadev, hasta ahora estoy comenzando este curso y te digo que esta muy interesante, pero ahora estoy pegado en este vídeo ya que no me funcionan las conexiones, cuando ejecuto el index me muestra el error
    “Parse error: syntax error, unexpected ‘self’ (T_STRING) in C:\xampp\htdocs\Blog\app\Conexion.inc.php on line 12”

    Voy a la linea 12 y :

    try {
    include_once config.inc.php;
    self::$conexion = new PDO(‘mysql:host=nombre_servidor;dbname=nombre_base_datos’, $nombre_usuario, $password);
    self::$conexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    self::$conexion -> exec(“SET CHARACTER SET utf8”);
    print ‘CONEXION ABIERTA’;
    }

    Espero que me colabores con esto, voy muy entusiamado con el curso y no quiero quedarme estancado.

    Gracias.

  • Que tal javadev, hablando de PDO, sabes que consegui el IDE PhpStorm, pero al usar PDO no me reconoce sus métodos, ósea me tira una advertencia como que el método por ejemplo BindParam no se encuentra, también me sucede lo mismo con otros métodos por ejemplo de las clases, RepositorioUsuarios, RepositorioEntradas, pero el proyecto funciona lo mas bien, que podría ser?. También tuve que dicho mal y pronto “asociar” la Db del blog con el gestor que me proporciona PhpStorm si no también me lanzaba advertencias de que no existía ningún DataSource, esto ultimo influye en algo con el código escrito en cuanto a la conexión con la DB?. Perdon por tantas preguntas pero es tanta información de una que estoy pensando en volver a NetBeans jaja.

    • Para aclarar quería comentarte un caso en concreto:
      En el escritor de entradas existe un método que las retorna a todas desde la DB si existe un resultado, llama al método escribir_entrada:

      if (count ($entradas)){
      foreach ($entradas as $entrada){
      self::escribir_entrada($entrada);

      Hasta aquí todo bien, pero dentro del mismo archivo, ya dentro del método escribir_entrada, para mostrar por ejemplo su titulo en el panel heading, se utiliza “echo $entrada->obtener_titulo();” aquí esta el problema el método obtener_titulo me tira la advertencia de que no fue encontrado, como dije andar anda pero resulta molesto ya que es como una falsa alarma.

      • Jajajaj, no te obsesiones, ningún IDE es perfecto. Normalmente los IDE de Java suelen funcionar mejor gracias a las garantías que lleva el lenguaje construidas. PHP y Javascript son más complejos y libres, por eso ningún IDE logra “entenderlos”.

        Al final muchos profesionales acaban optando por utilizar un editor de texto tipo SublimeText, Atom, Notepad++ o cualquier otro similar. Los IDE ayudan, pero nada puede sustituir a un programador bien entrenado y atento.

        Dicho eso, cuanto más programes, más inmune serás a los errores pequeños y al final acabarás sintiéndote a gusto con un editor de texto, olvidándote de los IDE y demás.

        • jajaja es cierto, de igual forma me gusto mucho este IDE estuve investigando con mi poco ingles y mucho traductor y logre ver que debo “comentar” la variable, para que PhpStorm entienda de que se trata y ahi me comenzó a reconocer los métodos, asi:

          /** @var PDO $conexion */
          if (isset($conexion))

          Realmente estoy aprendiendo mucho de php con el curso y esperando ancioso el de Symphony, Muchas gracias por tu esfuerzo.

  • Miguel Palominos

    Hola JavaDevOne, estoy trabajando con tu tutorial de Aprende a crear una página web (PHP para principiantes). Te fecilito, está excelente el tutorial. En el capitulo 20 donde trabajas con PDO y al ejecutar la web aparece este mensaje “notice only variables should be passed by reference”. A que se debe? o como se corrige? Gracias

    • Siento responderte tan tarde. Es sencillo, se debe a que al actualizar a nuevas versiones de PHP, ahora la seguridad es algo más estrcita. Ya no puedes pasar una función como argumento (por ejemplo $usuario obtener_nombre), ahora tienes que pasar sólo variables, sin ejecutar funciones dentro de los paréntesis de otra función.

  • Ivan Dario Mestra Julio

    Hola y buena tarde JavaDevOne, agradezco por todo el esfuerzo que haces por medio de estos tutoriales, están excelentes. Pero requiero del código generado en el capitulo 10 y no lo he podido encontrar, ¿Podrías ayudarme, indicándome donde esta? gracias

    • En esta serie no estaba guardando el código por capítulos, sólo existe la versión más reciente del proyecto. A partir de esas serie, comencé a guardar ya el código por capítulos por si acaso. Lo siento.

  • Gabriel Gomez

    Hola el curso de diseño web para principiantes es realmente bueno, lo estoy siguiendo y todo iba perfecto hasta este capitulo y el siguiente.
    Al cargar la pagina del blog me aparecen una serie de 8 errores tanto en el archivo index.php, como en el conexion.inc.php.
    He tratado de solucionarlos pero no puedo, sigo los pasos como los vas marcando pero hay esta contingencia, en consecuencia te agradeceria infinito si me pudieras ayudar. Me despido mandandote una gran felicitacion por tu trabajo.

  • Ramón Bibieca

    Hola, JavaDevOne.

    Tú esfuerzo es muy importante y por mi parte te lo agradezco y el tiempo que gasta en hacer tan buen trabajo; muchas gracias

  • Muy buenos los tutoriales de pagina web basica, voy por la parte de usuarios wue me interesa muchisimo y gracias a los videos aprendi un monton, te hago una pregunta, vos usas boostrap, ami me enseñaron a usar foundation zurb, cual es mejor? muchas gracias java dev

    • Sinceramente no te lo puedo comparar porque nunca he usado Fundation Zurb. Por popularidad, estoy seguro de que Bootstrap se usa mucho más a nivel mundial en muchos proyectos (Phonegap, Apache Cordova, Node.js y por supuesto en el desarrollo web corriente). Eso sí, que algo sea más popular no significa necesariamente que sea mejor. Lo que pasa con Bootstrap es que llevo usándolo más de 2 años y no me ha fallado ni dado problemas ni una sola vez. Es cómodo, práctico y rápido, así que lo sigo usando y no he tenido la necesidad de buscar alternativas 🙂

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *