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 probar la app resultante en mi sitio, y también 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.

Relacionado:  Elevar número a potencia en PHP

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.

Relacionado:  Obtener nombre de las tablas de base de datos en MySQL con PHP

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.

Relacionado:  Búsqueda en MySQL con PHP y PDO: con like y coincidencia exacta

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 probar la app en línea o navegar por todo el código fuente.

Apoya al sitio

¿Mi artículo te ha resultado útil? haz una donación. También pudes suscribirte a mi boletín semanal en la parte de abajo

Suscribir por correo

Ingresa tu correo y recibirás mis últimas entradas sobre programación, open source, bases de datos y todo lo relacionado con informática

Únete a otros 328 suscriptores


parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

5 Comments

Alejandro Pereira · noviembre 2, 2019 a las 10:53 am

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();

    parzibyte · noviembre 2, 2019 a las 11:32 am

    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

Alejandro Pereira · noviembre 2, 2019 a las 9:00 am

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

Extensión PDO de PostgreSQL con PHP y Linux Ubuntu - Parzibyte's blog · junio 24, 2019 a las 12:23 am

[…] vamos a ver cómo instalar la extensión de PDO PostgreSQL (es decir, el driver para conectar PostgreSQL con PHP) en […]

Deja un comentario

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

A %d blogueros les gusta esto: