Insertar datos en MySQL usando PDO en PHP

03/06/2024 | MySQL, PHP | 0 comentarios

Descubre cómo usar PDO en PHP para insertar datos en MySQL de manera segura y prevenir inyecciones SQL en tus aplicaciones web.

Descargar archivos


PDO (PHP Data Objects) es una extensión de PHP que proporciona una interfaz para trabajar con bases de datos de manera segura y flexible. Al utilizar PDO para interactuar con base de datos MySQL, podemos insertar datos de forma segura y eficiente.

Requisitos previos

Antes de empezar necesitamos una tabla, para ello creamos la tabla users donde guardaremos los datos de nuestros usuarios, la creamos con el siguiente script SQL:


CREATE TABLE `users` (
     `id` INT AUTO_INCREMENT,
     `name` VARCHAR(180) NOT NULL,
     `email` VARCHAR(180) NOT NULL,
     `phone` INT NULL,
     PRIMARY KEY (`id`) USING BTREE
);

El siguiente paso es realizar la conexión con MySQL usando las credenciales de nuestra base de datos, para mas detalle de esta conexión puedes leer Guía para conectar PHP a una base de datos con PDO.


<?php
// parameters
$dsn = 'mysql:host=localhost;port=3306;dbname=dbname';
$username = 'dbuser';
$password = 'password';
$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'",
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
);

try {
    $pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
    echo $e->getMessage();
    die();
}

Preparar la Consulta SQL

Ahora que tenemos la conexión y la tabla, lo siguiente es crear el script para insertar datos en MySQL, para ello usaremos los métodos de PDO:

  • prepare: Prepara una sentencia SQL para su ejecución.
  • bindParam: Vincula una variable PHP a un parámetro de la sentencia SQL.
  • execute: Ejecuta la sentencia SQL preparada.

Estos métodos se usan de la siguiente manera, preparamos la consulta, vinculamos las variables y ejecutamos la consulta:


$name = 'Louis';
$email = 'lous@gmail.com';
$phone = 99999999;

$stmt = $pdo->prepare("INSERT INTO users (name, email, phone) VALUES (:name, :email, :phone)");
$stmt->bindParam('name', $name);
$stmt->bindParam('email', $email);
$stmt->bindParam('phone',  $phone);
$stmt->execute();

Ejemplo completo

Ahora que ya conocemos como insertar datos en MySQL, vamos a implementar un ejemplo con un formulario el cual contendrá tres campos (nombre, correo y teléfono) además de un botón para enviar.


<form name="insertar" method="post" action="register.php?action=add">
    Nombre: <input type="text" name="name" placeholder="Nombres" />
    Email: <input type="text" name="email" placeholder="Correo electrónico" />
    Teléfono: <input type="text" name="phone" placeholder="Teléfono" />
    <button type="submit">Enviar</button>
</form>

Lo siguiente es crear el script PHP que reciba estos campos del formulario, estos datos los filtraremos usando el método filter_input para asegurarnos que estamos recibiendo los tipos de datos correctos. Luego de ello usamos PDO para insertar los datos:


// file: register.php
$action = $_GET['action'];

if ($action == 'add') {
    $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
    $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
    $phone = filter_input(INPUT_POST, 'phone', FILTER_SANITIZE_NUMBER_INT);

    $stmt = $pdo->prepare("INSERT INTO users (name, email, phone) VALUES (:name, :email, :phone)");
    $stmt ->bindParam(':name', $name);
    $stmt ->bindParam(':email', $email);
    $stmt ->bindParam(':phone', $phone);

    if ($insert->execute()) {
        echo "Datos insertados correctamente";
    } else {
        echo "Error al insertar datos";
    }
}

Uniendo primero la conexión a base de datos y luego el proceso con el guardado de datos tendríamos nuestros script en PHP que inserta datos en MySQL se manera sencilla:


<?php
// prepare connection
$dsn = 'mysql:host=localhost;port=3306;dbname=dbname';
$username = 'dbuser';
$password = 'password';
$options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4'",
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_OBJ
);

try {
    $pdo = new PDO($dsn, $username, $password, $options);
} catch (PDOException $e) {
    echo $e->getMessage();
    die();
}

// save data
$action = $_GET['action'];
if ($action == 'add') {
    $name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
    $email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
    $phone = filter_input(INPUT_POST, 'phone', FILTER_SANITIZE_NUMBER_INT);

    $stmt = $pdo->prepare("INSERT INTO users (name, email, phone) VALUES (:name, :email, :phone)");
    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':email', $email);
    $stmt->bindParam(':phone', $phone);

    if ($stmt->execute()) {
        echo "Datos insertados correctamente";
    } else {
        echo "Error al insertar datos";
    }
}

Recomendaciones

En el proceso de guardar datos en MySQL lo primero a tener en cuenta es la seguridad, por ello se recomienda:

  • Siempre valida los datos que llegan del formulario, por ejemplo verifica que el usuario haya ingresado números para el campo teléfono.
  • Siempre filtra los datos antes de guardarlos, por ejemplo si el usuario ha colocado texto para el teléfono lo puedes convertir a número antes de guardarlo.
  • Puedes agregar validación del formulario con JavaScript, esto ayudará a que tus usuarios ingresen los datos de manera correcta.

Conclusiones

Insertar datos en MySQL utilizando PDO en PHP es un proceso sencillo y seguro. Al seguir estos pasos, puedes asegurarte de que tu aplicación maneje correctamente las inserciones de datos y esté protegida contra inyecciones SQL.

Referencias

Envíar Comentario

En este sitio los comentarios se publican previa aprobación del equipo de Kodetop. Evita los comentarios ofensivos, obscenos o publicitarios. Si deseas publicar código fuente puedes hacerlo entre las etiquedas <pre></pre>