Conexión a MySQL con PHP



Si estás creando un sistema usando PHP y deseas acceder a una base de datos sin utilizar algún framework, entonces la librería PDO de PHP es algo que deberías de considerar. En este articulo voy a mostrarte una introducción de cómo trabajar con PHP y bases de datos usando PDO en tus proyectos. Para este ejemplo vamos a necesitar una base de datos MySQL. Voy a enseñarte como consultar una base de datos de MySQL y como leer y actualizar información en la base de datos.

Base de datos de ejemplo.

Para que puedas realizar los ejercicios de este articulo vas a necesitar una base de datos de pruebas o adaptar los ejercicios a la base de datos y tablas que tengas. Si lo deseas puedes crear una base de datos y crear una tabla llamada usuarios usando este código SQL, para que puedas seguir los ejemplos tal y como están:

CREATE TABLE `usuarios` (
	`id` INT NOT NULL AUTO_INCREMENT,
	`email` VARCHAR(100) NOT NULL,
	`nombre` VARCHAR(100) NOT NULL,
	`activo` BOOLEAN NOT NULL DEFAULT '0',
	PRIMARY KEY (`id`)
) ENGINE=InnoDB;

Como conectar MySQL con PHP

Lo primero que vamos a necesitar en tu código de PHP es abrir una conexión a la base de datos, para ello usamos esta sentencia

$pdo = new PDO('mysql:host=localhost;dbname=demo', 'root', '');

En donde debes cambiar la palabra demo por el nombre de tu base de datos, también cambia root por el usuario de la base de datos y en mi caso la clave está vacía por eso tengo solo dos comillas simples. La conexión queda guardada en la variable $pdo.

En un mundo ideal esto sería lo único que necesitas para conectar PHP con MySQL, pero en una aplicación real pueden ocurrir muchos errores, por ejemplo, que alguien cambie la clave a la base de datos, que la red falle, que el servidor de MySQL este apagado, etc. Si ese fuera el caso, las personas podría ver un mensaje como este (depende de la configuración de tu servidor) y la aplicación se interrumpiría sin ningún aviso.

Error de conexión PHP y MySQL

Por eso es importante capturar cualquier error que pueda darse al momento de iniciar la conexión, aquí hay un código de PHP que captura cualquier error posible:

try {
    $pdo = new PDO('mysql:host=localhost;dbname=demo', 'root', '');
} catch (PDOException $e) {
  
    die($e->getMessage());
}

El bloque try catch captura el error y lo muestra en pantalla, como puedes el error se puede consultar con $e->getMessage(), también finalizamos la ejecución del programa por que usualmente sin la conexión a la base de datos no podríamos realizar las siguientes tareas como consultas o actualizaciones.

Hay otras cosas que se podrían mejorar para un sistema que este en producción o en uso. Lo primero es que los datos de conexión como el usuario y la clave deberían de estar en un archivo separado, es decir, un archivo de configuración. Además, no es buena idea mostrar los mensajes en la pantalla, en este ejemplo estamos revelando el usuario con que nos conectamos y no debemos revelar información que haga más fácil ser víctima de un hacker, en lugar de mostrar el error, lo mejor sería mostrar un error genérico como “Error al conectarse a la base de datos” y el verdadero error lo guardamos en un archivo de log.

Revela información sobre la conexión a la base de datos.

Ejecutar sentencias SQL

En su forma más simple, esto se hace en tres pasos: (1) Definir la sentencia SQL, (2) Ejecutar la sentencia y (3) Recuperar la información. Aquí hay un ejemplo, suponiendo que tienes en tu base de datos una tabla llamada usuarios:

<?php
//Cambiar el nombre de la base de datos, usuario y clave
$pdo = new PDO('mysql:host=localhost;dbname=demo', 'root', '');
// (1) Definir SQL
$comando = $pdo->query("select * from usuarios");
// (2) Ejecutar SQL
$comando->execute();
// (3) Recuperar información
$resultado = $comando->fetchAll();
// Imprimir en pantalla
var_dump($resultado);
 ?>

Ejecutar sentencias SQL con parámetros

En el mundo real, las sentencias por lo general llevan uno o más parámetros, para este caso vamos a utilizar un paso adicional para definir los parámetros y su valor.

<?php
//Cambiar el nombre de la base de datos, usuario y clave
$pdo = new PDO('mysql:host=localhost;dbname=demo', 'root', '');
// (1) Definir SQL
$comando = $pdo->prepare("select * from usuarios where estado = :estado");
// (2) Asignar valores a los parametros
$estado = 'Activo';
$comando->bindParam(':estado', $estado);
// (3) Ejecutar SQL
$comando->execute();
// (4) Recuperar información
$resultado = $comando->fetchAll(PDO::FETCH_ASSOC);
// Imprimir en pantalla
var_dump($resultado);
 ?>

En el código anterior la sentencia SQL tiene definido un parámetro usando dos puntos como prefijo, el nombre del parámetro puede ser cualquiera, pero sin espacios en blanco y con dos puntos al inicio. También usamos el método prepare en lugar query.

Luego en el paso 2, definimos una variable, y con el método bindParam asociamos esta variable con el parámetro de la sentencia SQL.

El paso 3 sigue igual y en el paso 4 hay un cambio, esto no tiene nada que ver con el hecho de usar parámetros, es solo una forma diferente de recuperar la información, al agregar el parámetro PDO::FETCH_ASSOC, vamos a recuperar los datos como un array asociativo.

Importante: Al usar los parámetros de esta forma, en lugar de concatenarlos en una cadena de texto, estas protegiendo tu aplicación contra ataques de SQL injection.

Agregar información en la base de datos

Ahora veamos este código que permite agregar información en la base de datos usando PDO. Todos los datos se pasan como parámetros y utilizamos la sentencia insert de SQL

<?php
//Cambiar el nombre de la base de datos, usuario y clave
$pdo = new PDO('mysql:host=localhost;dbname=demo', 'root', '');
// (1) Definir SQL
$comando = $pdo->prepare("insert into usuarios (nombre, email, activo) values(:nombre, :email, :activo)");
// (2) Asignar valores a los parametros
$activo = '1';
$email = '[email protected]';
$nombre = 'Gaby Cruz';
$comando->bindParam(':activo', $activo);
$comando->bindParam(':email', $email);
$comando->bindParam(':nombre', $nombre);
// (3) Ejecutar SQL
$comando->execute();
?>

Modificar información en la base de datos

<?php
//Cambiar el nombre de la base de datos, usuario y clave
$pdo = new PDO('mysql:host=localhost;dbname=demo', 'root', '');
// (1) Definir SQL
$comando = $pdo->prepare("update usuarios set nombre = :nombre where id = :id");
// (2) Asignar valores a los parametros
$id = 1;
$nombre = 'Gaby Cruz Garcia';
$comando->bindParam(':id', $id);
$comando->bindParam(':nombre', $nombre);
// (3) Ejecutar SQL
$comando->execute();
?>

Eliminar información en la base de datos

<?php
//Cambiar el nombre de la base de datos, usuario y clave
$pdo = new PDO('mysql:host=localhost;dbname=demo', 'root', '');
// (1) Definir SQL
$comando = $pdo->prepare("delete from usuarios where id = :id");
// (2) Asignar valores a los parametros
$id = 1;
$comando->bindParam(':id', $id);
// (3) Ejecutar SQL
$comando->execute();
?>

Si tienes alguna duda sobre este tema, puedes dejarme un mensaje en los comentarios

Versión en Video

Aquí está la versión en Video de este artículo, si prefieres los videos, puedes suscribirte a mi canal de YouTube

Conexión a MySQL con PHP

Deja una respuesta

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

Scroll hacia arriba