W3docs

PHP MySQL Select Where

Aprende a usar la cláusula WHERE de MySQL en PHP para filtrar resultados con operadores lógicos y sentencias preparadas seguras con PDO y MySQLi.

La sentencia SELECT se utiliza para obtener datos de una base de datos. La cláusula WHERE se usa para filtrar datos en función de condiciones específicas. La cláusula WHERE puede combinarse con la sentencia SELECT para obtener únicamente datos específicos de la base de datos.

Esta es la sintaxis básica de la sentencia SELECT con la cláusula WHERE:

Sintaxis básica de PHP / SQL para la sentencia SELECT con la cláusula WHERE

SELECT column1, column2, ...
FROM table_name
WHERE condition;

En la sintaxis anterior:

  • column1, column2, ... son las columnas de las que deseas obtener datos.
  • table_name es el nombre de la tabla de la que deseas obtener datos.
  • condition es una expresión lógica que determina qué datos recuperar.

Ejemplo

Considera una tabla llamada customers con los siguientes datos:

idnameemailcountry
1John[email protected]USA
2Jane[email protected]UK
3Alice[email protected]France

A continuación se muestra un ejemplo de cómo usar la sentencia SELECT con la cláusula WHERE para recuperar únicamente datos específicos de la tabla customers:

Ejemplo PHP / SQL de cómo usar la sentencia SELECT con la cláusula WHERE para recuperar datos específicos de la tabla customers

SELECT name, email
FROM customers
WHERE country = 'USA';

La sentencia SELECT anterior devolverá solo las filas donde la columna country sea igual a USA. La salida será:

name      | email
----------|----------------------
John      | [email protected]

Condiciones Múltiples

También puedes usar múltiples condiciones en la cláusula WHERE. Por ejemplo, puedes recuperar todos los clientes de la tabla customers que viven en USA y tienen una dirección de correo electrónico que termina en example.com.

PHP / SQL: recuperar todos los clientes de la tabla customers que viven en USA y tienen una dirección de email que termina en example.com

SELECT name, email
FROM customers
WHERE country = 'USA'
AND email LIKE '%example.com';

La sentencia SELECT anterior devolverá la siguiente salida:

name      | email
----------|----------------------
John      | [email protected]

Puedes usar operadores lógicos como AND y OR para combinar múltiples condiciones en la cláusula WHERE. Cuando los mezcles, encierra el grupo OR entre paréntesis para que la precedencia sea la esperada:

SELECT name, email
FROM customers
WHERE country = 'USA'
AND (name = 'John' OR name = 'Alice');

Operadores de Comparación y Lógicos

La condition en una cláusula WHERE se construye a partir de operadores. Estos son los que usarás con más frecuencia:

OperadorSignificadoEjemplo
=Igual acountry = 'USA'
<> o !=Distinto decountry <> 'UK'
>, <, >=, <=Mayor / menor queid >= 2
BETWEENDentro de un rango inclusivoid BETWEEN 1 AND 3
INCoincide con cualquier valor de una listacountry IN ('USA', 'UK')
LIKECoincidencia de patrón (% = cualquier carácter, _ = un carácter)email LIKE '%@example.com'
IS NULL / IS NOT NULLVerifica valores ausentesemail IS NOT NULL
AND, OR, NOTCombinar o negar condicionescountry = 'USA' AND id > 1

Algunos patrones comunes:

-- Match several values without writing OR three times
SELECT name FROM customers WHERE country IN ('USA', 'UK', 'France');

-- Inclusive numeric range
SELECT name FROM customers WHERE id BETWEEN 1 AND 2;

-- Find rows where a value is missing (do NOT use = NULL — that never matches)
SELECT name FROM customers WHERE email IS NULL;

Ejecutar una Consulta WHERE desde PHP

El título de esta página es "PHP MySQL", así que aquí está la parte que realmente se ejecuta en PHP. Dado que el valor de WHERE casi siempre proviene de la entrada del usuario (un campo de búsqueda, un parámetro de URL), nunca debes concatenarlo directamente en la cadena SQL — eso abre la puerta a la inyección SQL. Usa una sentencia preparada y vincula el valor como parámetro.

Ejemplo: filtrar por país con una sentencia preparada PDO

<?php
$pdo = new PDO('mysql:host=localhost;dbname=shop;charset=utf8mb4', 'user', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// The user-supplied value never touches the SQL text directly.
$country = $_GET['country'] ?? 'USA';

$stmt = $pdo->prepare('SELECT name, email FROM customers WHERE country = ?');
$stmt->execute([$country]);

foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
    echo $row['name'] . ' - ' . $row['email'] . "\n";
}

La misma consulta con MySQLi se ve así:

Ejemplo: la misma consulta con MySQLi

<?php
$conn = new mysqli('localhost', 'user', 'password', 'shop');

$country = $_GET['country'] ?? 'USA';

$stmt = $conn->prepare('SELECT name, email FROM customers WHERE country = ?');
$stmt->bind_param('s', $country); // 's' = the parameter is a string
$stmt->execute();
$result = $stmt->get_result();

while ($row = $result->fetch_assoc()) {
    echo $row['name'] . ' - ' . $row['email'] . "\n";
}

Nota de Seguridad: Siempre filtra la entrada del usuario mediante parámetros vinculados (PDO o MySQLi), nunca construyendo la cadena SQL con "... WHERE country = '$country'". Las sentencias preparadas mantienen los datos y el código separados, lo cual es lo que previene la inyección SQL.

Temas Relacionados

Práctica

Práctica
¿Cuál es el uso de la cláusula WHERE en MySQL en PHP?
¿Cuál es el uso de la cláusula WHERE en MySQL en PHP?
Was this page helpful?