Taller > PHP > Base de Datos MySQL
Obtener Datos de una Base de Datos MySQL con PHP
Después de insertar datos en una base de datos MySQL, el siguiente paso es obtener esos datos para mostrarlos o manipularlos en nuestras aplicaciones.
A continuación, veremos cómo recuperar datos de una tabla MySQL llamada products utilizando MySQLi y PDO con diferentes ejemplos prácticos.
La Sentencia SELECT
Para recuperar datos de una tabla en MySQL, utilizamos la sentencia SQL SELECT. En este ejemplo, usaremos la siguiente tabla:
Tabla: products
Columnas:
product_id: Entero que actúa como clave primaria.
product_name: Nombre del producto (cadena de caracteres).
price: Precio del producto (decimal).
La consulta básica para seleccionar todos los datos de la tabla sería:
SELECT product_id, product_name, price FROM products;
Obtener Datos Usando MySQLi Orientado a Objetos
El siguiente código muestra cómo recuperar datos utilizando MySQLi en su modo orientado a objetos.
<?php
$servidor = "localhost";
$usuario = "usuario";
$contraseña = "contraseña";
$base_datos = "tienda_db";
// Crear conexión
$conn = new mysqli($servidor, $usuario, $contraseña, $base_datos);
// Verificar conexión
if ($conn->connect_error) {
die("Error en la conexión: " . $conn->connect_error);
}
// SQL para seleccionar los datos
$sql = "SELECT product_id, product_name, price FROM products";
$resultado = $conn->query($sql);
// Verificar si hay resultados
if ($resultado->num_rows > 0) {
// Imprimir los datos
while($fila = $resultado->fetch_assoc()) {
echo "Product ID: " . $fila["product_id"] . "
";
echo "Product Name: " . $fila["product_name"] . "
";
echo "Price: $" . number_format($fila["price"], 2) . "<br>";
echo "-------------------------<br>";
}
} else {
echo "No se encontraron productos.";
}
// Liberar memoria y cerrar la conexión
$resultado->free();
$conn->close();
?>
Descripción:
Aquí hemos cambiado el ejemplo anterior para que recupere productos desde la tabla products. Se formatea el precio a dos decimales utilizando number_format(). Si no hay registros, se muestra un mensaje indicando que no se encontraron productos.
Obtener Datos Usando MySQLi Procedural
Este ejemplo utiliza MySQLi en su modo procedural para hacer la misma operación, pero con un enfoque diferente.
<?php
$servidor = "localhost";
$usuario = "usuario";
$contraseña = "contraseña";
$base_datos = "tienda_db";
// Crear conexión
$conn = mysqli_connect($servidor, $usuario, $contraseña, $base_datos);
// Verificar conexión
if (!$conn) {
die("Error en la conexión: " . mysqli_connect_error());
}
// SQL para seleccionar los datos
$sql = "SELECT product_id, product_name, price FROM products";
$resultado = mysqli_query($conn, $sql);
// Verificar si hay resultados
if (mysqli_num_rows($resultado) > 0) {
// Imprimir los datos
while($fila = mysqli_fetch_assoc($resultado)) {
echo "ID del Producto: " . $fila["product_id"] . "<br>";
echo "Nombre del Producto: " . $fila["product_name"] . "<br>";
echo "Precio: $" . number_format($fila["price"], 2) . "<br>";
echo "=========================<br>";
}
} else {
echo "No se encontraron productos.";
}
// Liberar memoria y cerrar la conexión
mysqli_free_result($resultado);
mysqli_close($conn);
?>
Descripción:
En este ejemplo, nuevamente accedemos a la tabla products, pero con MySQLi en modo procedural. El formato del precio sigue siendo el mismo, y los mensajes de salida son diferentes para darle variedad al enfoque.
Obtener Datos Usando PDO
Este ejemplo utiliza PDO para obtener los productos de la tabla products, con una estructura diferente.
<?php
$servidor = "localhost";
$usuario = "usuario";
$contraseña = "contraseña";
$base_datos = "tienda_db";
try {
// Crear conexión PDO
$conn = new PDO("mysql:host=$servidor;dbname=$base_datos", $usuario, $contraseña);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// SQL para seleccionar los datos
$sql = "SELECT product_id, product_name, price FROM products";
$resultado = $conn->query($sql);
// Verificar si hay resultados
if ($resultado->rowCount() > 0) {
// Imprimir los datos
while($fila = $resultado->fetch(PDO::FETCH_ASSOC)) {
echo "ID Producto: " . $fila["product_id"] . "<br>";
echo "Producto: " . $fila["product_name"] . "<br>";
echo "Precio: $" . number_format($fila["price"], 2) . "<br>";
echo "-------------------------<br>";
}
} else {
echo "No se encontraron productos.";
}
} catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
// Cerrar la conexión
$conn = null;
?>
Descripción:
En este ejemplo, PDO es usado para conectarse a la base de datos y recuperar datos de la tabla products. Se utiliza fetch() con PDO::FETCH_ASSOC para devolver los resultados como arreglos asociativos. El código es similar a los ejemplos anteriores pero con un manejo de excepciones más detallado, típico de PDO.
Liberar Memoria
Es importante liberar los recursos utilizados por las consultas SELECT para optimizar el uso de memoria en el servidor.
// MySQLi orientado a objetos
$resultado->free();
// MySQLi procedural
mysqli_free_result($resultado);
// PDO
$conn = null; // PDO cierra la conexión al asignar null
Conclusión
Hemos visto cómo obtener datos de una tabla MySQL llamada products utilizando PHP con MySQLi y PDO.
Estos ejemplos muestran diferentes maneras de trabajar con las mismas funcionalidades, adaptándose a diferentes enfoques y estilos de programación.
Utilizando las mejores prácticas y liberando recursos, aseguramos un código más eficiente y optimizado.