Taller > PHP > Base de Datos MySQL
Cómo Usar Cláusula WHERE en PHP con MySQL
La cláusula WHERE es una de las herramientas más importantes al trabajar con bases de datos. Te permite filtrar registros y obtener solo los datos que cumplen con una condición específica. En este artículo, aprenderás a usar la cláusula WHERE con MySQL y PHP usando MySQLi y PDO.
¿Qué es la cláusula WHERE?
La cláusula WHERE se utiliza en SQL para filtrar los resultados de una consulta. Solo se devuelven los registros que cumplen con la condición especificada.
Sintaxis básica de WHERE
SELECT columna(s) FROM tabla WHERE columna operador valor;
Por ejemplo, si queremos obtener todos los registros de una tabla de empleados donde el apellido sea “García”, la consulta sería:
SELECT * FROM empleados WHERE apellido = 'García';
Filtrando datos con MySQLi Orientado a Objetos
En este ejemplo, vamos a filtrar los registros de la tabla empleados donde el nombre es “Carlos” utilizando MySQLi en su enfoque orientado a objetos.
Ejemplo de MySQLi Orientado a Objetos
<?php
$servidor = "localhost";
$usuario = "root";
$contraseña = "";
$base_datos = "empresa";
// Crear conexión
$conexion = new mysqli($servidor, $usuario, $contraseña, $base_datos);
// Verificar conexión
if ($conexion->connect_error)
{ die("Conexión fallida: " . $conexion->connect_error);
}
// Consulta SQL con cláusula WHERE
$sql = "SELECT id, nombre, apellido FROM empleados WHERE nombre='Carlos'";
$resultado = $conexion->query($sql);
if ($resultado->num_rows > 0) {
// Salida de cada fila
while($fila = $resultado->fetch_assoc()) {
echo "ID: " . $fila["id"]. " - Nombre: " . $fila["nombre"]. " " . $fila["apellido"]. "<br>";
}
} else {
echo "0 resultados";
}
$conexion->close();
?>
Explicación del código
$conexion->query($sql): Ejecuta la consulta SQL.
$resultado->num_rows > 0: Verifica si hay resultados.
$fila = $resultado->fetch_assoc(): Recupera cada fila como un array asociativo.
Filtrando datos con MySQLi Procedural
Si prefieres trabajar con el enfoque procedural, el siguiente ejemplo realiza la misma operación con funciones procedurales de MySQLi.
Ejemplo de MySQLi Procedural
<?php
$servidor = "localhost";
$usuario = "root";
$contraseña = "";
$base_datos = "empresa";
// Crear conexión
$conexion = mysqli_connect($servidor, $usuario, $contraseña, $base_datos);
// Verificar conexión
if (!$conexion) {
die("Conexión fallida: " . mysqli_connect_error());
}
// Consulta SQL con cláusula WHERE
$sql = "SELECT id, nombre, apellido FROM empleados WHERE nombre='Ana'";
$resultado = mysqli_query($conexion, $sql);
if (mysqli_num_rows($resultado) > 0) {
// Salida de cada fila
while($fila = mysqli_fetch_assoc($resultado)) { echo "ID: " . $fila["id"]. " - Nombre: " . $fila["nombre"]. " " . $fila["apellido"]. "<br>";
}
} else {
echo "0 resultados";
}
mysqli_close($conexion);
?>
Explicación del código
mysqli_query(): Ejecuta la consulta SQL.
mysqli_num_rows(): Verifica si se encontraron registros.
mysqli_fetch_assoc(): Recorre los resultados.
Mostrando resultados en una tabla HTML con MySQLi Orientado a Objetos
En algunos casos, es útil mostrar los datos en una tabla HTML. Aquí te mostramos cómo hacerlo.
Ejemplo de MySQLi con Tabla HTML
<?php
$servidor = "localhost";
$usuario = "root";
$contraseña = "";
$base_datos = "empresa";
// Crear conexión
$conexion = new mysqli($servidor, $usuario, $contraseña, $base_datos);
// Verificar conexión
if ($conexion->connect_error) {
die("Conexión fallida: " . $conexion->connect_error);
}
$sql = "SELECT id, nombre, apellido FROM empleados WHERE apellido='Pérez'";
$resultado = $conexion->query($sql);
if ($resultado->num_rows > 0) {
echo "<table><tr><th>ID</th><th>Nombre</th></tr>";
// Salida de cada fila
while($fila = $resultado->fetch_assoc()) {
echo "<tr><td>" . $fila["id"]. "</td><td>" . $fila["nombre"]. " " . $fila["apellido"]. "</td></tr>";
}
echo "</table>";
} else {
echo "0 resultados";
}
$conexion->close();
?>
Explicación del código
Los datos obtenidos de la base de datos se formatean y se presentan en una tabla HTML con las etiquetas <table>, <tr>, y <td>.
Filtrando datos con PDO y Sentencias Preparadas
El uso de PDO y sentencias preparadas es una buena práctica, ya que mejora la seguridad al prevenir inyecciones SQL. Aquí mostramos cómo hacerlo.
Ejemplo de PDO con Sentencias Preparadas
<?php
echo "<table style='border: solid 1px black;'><tr><th>ID</th><th>Nombre</th><th>Apellido</th></tr>";
class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
return "<td style='width:150px;border:1px solid black;'>" . parent::current() . "</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>" . "\n";
}
}
$servidor = "localhost";
$usuario = "root";
$contraseña = "";
$base_datos = "empresa";
try {
$conexion = new PDO("mysql:host=$servidor;dbname=$base_datos", $usuario, $contraseña);
$conexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Consulta preparada con WHERE
$stmt = $conexion->prepare("SELECT id, nombre, apellido FROM empleados WHERE apellido = :apellido");
$stmt->execute(['apellido' => 'Gómez']);
// Mostrar resultados
$resultado = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conexion = null;
echo "</table>";
?>
Explicación del código
Sentencias preparadas: Utilizamos prepare() para preparar la consulta SQL. Luego, execute() asocia los valores a los marcadores de posición.
TableRows: Se usa una clase personalizada para recorrer los resultados y generar una tabla HTML.
Conclusión
La cláusula WHERE es fundamental para filtrar datos en las consultas SQL. Usar PHP con MySQL permite implementar consultas filtradas de manera eficiente, ya sea utilizando MySQLi en modo orientado a objetos, procedural o PDO con sentencias preparadas. Las sentencias preparadas mejoran la seguridad de tus aplicaciones, previniendo inyecciones SQL.