Consultar datos de MySQL utilizando PDO

07/04/2020 | MySQL, PHP | 0 comentarios

Cómo obtener los datos de MySQL e imprimirlos en HTML de manera sencilla y segura utilizando PDO.

Descargar archivos Ver ejemplo

Consultar datos desde una Base de datos y mostrarlos en HTML es una de las tareas mas recurrentes en el desarrollo web, es sencillo pero es necesario tener cuidado para evitar problemas de seguridad y por ello usaremos PDO.

Conexión con PDO

En el artículo Conectar PHP con Base de Datos utilizando PDO hemos descrito como implementar una conexión de manera sencilla.

La conexión se implementa y configura en el archivo pdo.php y para utilizarlo se lo importa de la siguiente forma:


<?php 
// include connection
require 'pdo.php';

Métodos para consultas de PDO

PDO ofrece los siguientes métodos para enviar una consulta a base de datos:

  • prepare prepara una sentencia para su ejecución y devuelve un objeto sentencia.
  • bindValue vincula una variable con un parámetro de la consulta.
  • execute ejecuta una sentencia preparada previamente.

PDO ofrece los siguientes métodos para recorrer los datos obtenidos por la consulta:

  • fetch obtiene el siguiente registro de los resultados.
  • fetchAll obtiene un array con todos los registros de los resultados.

Con estos métodos es posible consultar datos e imprimirlos en HTML, para entender cómo hacerlo usaremos un ejemplo práctico.

Ejemplo práctico

Para el ejemplo usaremos una base de datos en MySQL que contiene una tabla llamada country con la información de todos los países.

Tabla de países: Country

Listado de países

Consultamos la lista de países utilizando los métodos prepare y execute.


<?php
// include connection
require 'pdo.php';

// prepare query
$statement = $pdo->prepare("SELECT * FROM country");
$statement->execute();

Recorremos los resultados utilizando el método fetch y generamos un listado con enlaces al detalle del país.


<ul>
    <?php while (($result = $statement->fetch()) !== false): ?>
    <li>
        <a href="country.php?code=<?php echo $result->code; ?>"><?php echo $result->name; ?></a>
    </li>
    <?php endwhile; ?>
</ul>

Detalle del país

Para obtener los datos del país seleccionado vamos a seguir los siguientes pasos:

  • Obtenemos el código de país con filter_input que permite obtener un parámetro y filtrarlo como string utilizando la opción FILTER_SANITIZE_STRING.
  • Preparamos la consulta que contiene un parámetro, utilizamos bindValue para asignar el valor del parámetro y lo convertimos a string con la opción PDO::PARAM_STR.
  • Obtenemos el resultado con el método fetch y si no hay resultados hacemos una redirección al listado de países

<?php
// include connection
require 'pdo.php';

// get and filter parameter
$code = filter_input(INPUT_GET, 'code', FILTER_SANITIZE_STRING);

// prepare query
$statement = $pdo->prepare("SELECT * FROM country WHERE Code = :code");
$statement->bindValue(':code', $code, PDO::PARAM_STR);
$statement->execute();

// get the result
$result = $statement->fetch();

// is not result back to list
if ($result === false) {
    header('location: countries.php');
    exit();
}

Luego sólo queda imprimir todos los datos del país e incluir un enlace de regreso al listado:


<h1>Country</h1>
<p>
    <strong>Name</strong>: <?php echo $result->name; ?><br>
    <strong>Continent</strong>: <?php echo $result->continent; ?><br>
    <strong>Region</strong>: <?php echo $result->region; ?><br>
    <strong>Population</strong>: <?php echo number_format($result->population); ?><br>
    <strong>Area</strong>: <?php echo number_format($result->area); ?><br>
    <strong>Head of State</strong>: <?php echo $result->headofstate; ?>
</p>
<p>
    <a href="countries.php">Back to countries</a>
</p>

Cómo se observa obtener los datos en sencillo y en pocos pasos pero hemos agregado algunas validaciones para evitar problemas de seguridad.

Recomendaciones

Cuando se utilizan datos que vienen de los usuarios es indispensable limpiarlos y validarlos antes de usarlos en las consultas para evitar problemas de seguridad.

Es necesario contemplar los casos que puedan generar error, por ejemplo: si un código de país no existe hay que redireccionar al listado principal.

Al utilizar bindValue para asignar valores a los parámetros se recomienda seleccionar el tipo de dato correcto para evitar ataques de inyección 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>