Conectar PostgreSQL y PHP usando PDO | CRUD

En este post vamos a ver cómo consumir una base de datos de Postgres a través de PHP usando el controlador PDO.

Haremos las 4 operaciones básicas del motor: create, read, update y delete; lo que es crear, leer, actualizar y eliminar, todo desde PHP.

Como en todos mis tutoriales, vamos a conectar a una base de datos SQL evitando inyecciones SQL 😉

Conectar PHP con PostgreSQL

Nota: recuerda habilitar la extensión de PostgreSQL (o mira este otro si usas cPanel).

Nota 2: puedes ver el código completo en GitHub.

Base de datos

Vamos a usar una base de datos llamada mascotas, que tendrá a su vez una tabla llamada mascotas.

Las mascotas tendrán un id serial, un nombre y una edad. Esto es para ejemplificar con datos simples y sin relaciones.

Cadena de conexión

Vamos a poner todo lo relativo a la conexión a la base de datos en un archivo que más tarde vamos a incluir.

Comenzamos creando un objeto PDO; la cadena de conexión es la siguiente:

Lo único que hay que hacer es cambiar las credenciales de acuerdo a nuestra configuración.

Si no puedes realizar la conexión crea un usuario y una base de datos nueva.

Plantilla base

Vamos a tomar la plantilla de Bootstrap 4. No te debería importar mucho el diseño, pues importa más la aplicación, así que no te confundas por las clases o los estilos.

Definiremos un encabezado con el menú de navegación, y un pie que cierra las etiquetas.

El contenido será puesto dentro del elemento main.

Insertar: formulario

La forma más común con la que el usuario ingresa datos a nuestra app es a través de formularios web. Veamos cómo se define:

Presta atención al atributo name de cada campo, pues con ese valor vamos a leer los datos al recibirlos.

También mira el action del formulario, va a insertar.php

Guardar datos del formulario

Aquí es en donde realmente guardamos los datos. Lo que se envió en el formulario se encuentra en el arreglo superglobal $_POST y accedemos a cada valor a través del atributo name.

Para tener disponible la conexión a la base de datos simplemente hacemos un include del archivo y listo, tenemos la variable $base_de_datos.

Se debe crear una sentencia o prepared statement con el método prepare, pasando la consulta pero en lugar de datos se ponen placeholders con signos de interrogación.

Los verdaderos datos se envían cuando se llama a execute de la sentencia, y se pasan en forma de arreglo en el mismo orden que aparecen los signos de interrogación.

El método execute regresa un booleano, y si todo es correcto, hacemos una redirección al archivo listar.php.

Obtener datos

Voy a exponer dos maneras de obtener datos o hacer un select. El primer método trae los datos en un arreglo, pero recordemos que el arreglo se guarda en memoria y por lo tanto para un arreglo grande esto no es recomendable.

El segundo método (se le llama iterar con un cursor) es más ligero y usa un ciclo, el cual simplemente lee dato por dato (cargando una fila en memoria a la vez) sin importar el número de los mismos.

Con arreglo

Para traer los datos en un arreglo se usa el siguiente código:

Así de simple, ahora podemos enviar ese arreglo como salida JSON, o recorrerlo y dibujar elementos.

Haremos esto último y por lo tanto el código que lista o dibuja los datos es el siguiente:

Todos los datos son dibujados en una tabla y adicional a ello se crea un enlace o ancla que llevará a dos archivos que veremos más adelante: editar.php y eliminar.php

Cada enlace tendrá el id de la mascota actual, por ejemplo, uno se verá así:

editar.php?id=1

Y otro así: eliminar.php?id=1

Esto es para que podamos recuperar el id en los demás archivos.

Obtener datos con cursor

Ahora veamos el otro enfoque que es más óptimo en algunos casos. Es casi lo mismo, pero en un ciclo while que se realizará siempre y cuando fetchObject traiga algo distinto de null.

Igualmente accedemos al objeto con el operador flecha -> haciendo el código más expresivo.

Editar

Editar tiene 2 etapas. Una en donde se muestra el formulario para editar (con los campos rellenados por defecto) y otra en donde se guardan los datos editados.

Comencemos viendo el formulario. Tenemos que recuperar el id de la URL (el que se dibujó con la tabla) a través de $_GET.

Cuando tenemos el id, consultamos los datos frescos de la mascota, y rellenamos el formulario poniendo el valor en el value de cada input.

El action del formulario es guardarDatosEditados.php que funciona casi igual que el que inserta, pero haciendo un update.

Por cierto, el id se guarda en un input oculto que el usuario, teóricamente, no puede modificar. Así tenemos un registro del id sin que el usuario tenga que escribirlo.

Para pasar los datos se usa igualmente un arreglo y se ponen placeholders para evitar inyecciones SQL.

En caso de éxito se redirige a listar, y en caso contrario, se imprime el error.

Eliminar

El de eliminar es posiblemente la parte más sencilla, pero debes tener cuidado si esta operación necesita confirmación.

En el caso más simple deberías usar un token csrf como el que se utiliza en un sistema de cotizaciones que hice hace tiempo.

Si solo es un proyecto personal o escolar, no importa que lo hagas con un simple enlace.

En el código se hace un delete (evitando inyecciones SQL de nuevo) con un where, es un simple execute como el que se hace un update y un insert.

Conclusión

Gracias a PDO podemos conectar PHP con bases de datos de una manera simple y genérica, ya que si en un futuro queremos cambiar de base de datos simplemente cambiamos la creación del objeto PDO.

De hecho, este código es casi idéntico al que utilicé en la conexión con SQL Server.

Si quieres ver más como esto te invito a leer:

No olvides que puedes navegar por todo el código fuente.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

7 comentarios en “Conectar PostgreSQL y PHP usando PDO | CRUD”

  1. Buen día. Te comento que me da el siguiente error:
    Ocurrió un error con la base de datos: could not find driver
    Notice: Undefined variable: base_de_datos in C:\xampp\htdocs\mascotas\listar.php on line 15

    Fatal error: Uncaught Error: Call to a member function query() on null in C:\xampp\htdocs\mascotas\listar.php:15 Stack trace: #0 {main} thrown in C:\xampp\htdocs\mascotas\listar.php on line 15

    Lo probé en 2 máquinas: Win7 y Win10. En ambas tengo la misma configuración: XAMPP ControlPanel v3.3.0 con Postgre13 (pgAdmi4). ¿Alguna sugerencia? Muchas gracias.-

  2. hola ya cambie la sentencia pero me da error en la siguiente linea
    Parse error: syntax error, unexpected T_STRING in C:\wamp\www\2019-A-01\CRUD-postgresql-php-master\editar.php on line 21

    17 $id = $_GET[“id”];
    18 include_once “base_de_datos.php”;
    19 $sentencia = $base_de_datos->prepare(“SELECT id, nombre, edad FROM mascotas WHERE id = ?;”);
    20 $sentencia = array($id);
    21 $mascota = $sentencia fetchObject();

    1. Te recomiendo colocar tu código en gist.github.com para que pueda leerlo correctamente, ya que mi sitio remueve algunas etiquetas. Una vez que lo pongas en un gist, copia y pega el enlace en los comentarios

  3. Hola me Permito Pedirte una ayuda ya que al tratar de ejecutarlas opciones de Insertar da este error: Parse error: syntax error, unexpected ‘[‘, expecting ‘)’ in C:\wamp\www\2019-A-01\CRUD-postgresql-php-master\editar.php on line 20
    y tengo el codigo

  4. Pingback: Extensión PDO de PostgreSQL con PHP y Linux Ubuntu - Parzibyte's blog

Dejar un comentario