PHP MySQL Select Where
Aprenda a usar a cláusula WHERE do MySQL em PHP para filtrar resultados SELECT com operadores e prepared statements seguros com PDO e MySQLi.
A instrução SELECT é usada para buscar dados de um banco de dados. A cláusula WHERE é usada para filtrar dados com base em condições específicas. A cláusula WHERE pode ser combinada com a instrução SELECT para buscar apenas dados específicos do banco de dados.
Aqui está a sintaxe básica da instrução SELECT com a cláusula WHERE:
Sintaxe básica PHP / SQL da instrução SELECT com a cláusula WHERE
SELECT column1, column2, ...
FROM table_name
WHERE condition;Na sintaxe acima:
column1,column2, ... são as colunas das quais você deseja buscar dados.table_nameé o nome da tabela da qual você deseja buscar dados.conditioné uma expressão lógica que determina quais dados recuperar.
Exemplo
Considere uma tabela chamada customers com os seguintes dados:
| id | name | country | |
|---|---|---|---|
| 1 | John | [email protected] | USA |
| 2 | Jane | [email protected] | UK |
| 3 | Alice | [email protected] | France |
Aqui está um exemplo de como usar a instrução SELECT com a cláusula WHERE para recuperar apenas dados específicos da tabela customers:
Exemplo PHP / SQL de como usar a instrução SELECT com a cláusula WHERE para recuperar apenas dados específicos da tabela customers
SELECT name, email
FROM customers
WHERE country = 'USA';A instrução SELECT acima retornará apenas as linhas onde a coluna country é igual a USA. O resultado será:
name | email
----------|----------------------
John | [email protected]Múltiplas Condições
Você também pode usar múltiplas condições na cláusula WHERE. Por exemplo, você pode recuperar todos os clientes da tabela customers que moram nos USA e têm um endereço de e-mail que termina com example.com.
PHP / SQL recuperar todos os clientes da tabela customers que moram nos USA e têm um endereço de e-mail que termina com example.com
SELECT name, email
FROM customers
WHERE country = 'USA'
AND email LIKE '%example.com';A instrução SELECT acima retornará o seguinte resultado:
name | email
----------|----------------------
John | [email protected]Você pode usar operadores lógicos como AND e OR para combinar múltiplas condições na cláusula WHERE. Ao combiná-los, coloque o grupo OR entre parênteses para que a precedência seja a esperada:
SELECT name, email
FROM customers
WHERE country = 'USA'
AND (name = 'John' OR name = 'Alice');Operadores de Comparação e Lógicos
A condition em uma cláusula WHERE é construída a partir de operadores. Estes são os mais usados:
| Operador | Significado | Exemplo |
|---|---|---|
= | Igual a | country = 'USA' |
<> ou != | Diferente de | country <> 'UK' |
>, <, >=, <= | Maior / menor que | id >= 2 |
BETWEEN | Dentro de um intervalo inclusivo | id BETWEEN 1 AND 3 |
IN | Corresponde a qualquer valor em uma lista | country IN ('USA', 'UK') |
LIKE | Correspondência de padrão (% = qualquer caractere, _ = um caractere) | email LIKE '%@example.com' |
IS NULL / IS NOT NULL | Testa valores ausentes | email IS NOT NULL |
AND, OR, NOT | Combina ou nega condições | country = 'USA' AND id > 1 |
Alguns padrões comuns:
-- 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;Executando uma Consulta WHERE a partir do PHP
O título da página é "PHP MySQL", então aqui está a parte que realmente é executada em PHP. Como o valor do WHERE quase sempre vem de entrada do usuário (uma caixa de pesquisa, um parâmetro de URL), você nunca deve concatená-lo diretamente na string SQL — isso abre a porta para injeção de SQL. Use um prepared statement e vincule o valor como parâmetro.
Exemplo: filtrando por país com um prepared statement 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";
}A mesma consulta com MySQLi tem a seguinte aparência:
Exemplo: a mesma consulta com 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 Segurança: Sempre filtre a entrada do usuário através de parâmetros vinculados (PDO ou MySQLi), nunca construindo a string SQL com
"... WHERE country = '$country'". Os prepared statements mantêm dados e código separados, o que é o que previne a injeção de SQL.
Tópicos Relacionados
- PHP MySQL Select — os fundamentos do
SELECTsobre os quais esta cláusula se baseia. - PHP MySQL Order By — ordene as linhas que sua cláusula
WHEREretorna. - PHP MySQL Limit Data — limite quantas linhas filtradas são retornadas.
- PHP MySQL Prepared Statements — uma visão mais aprofundada do padrão seguro usado acima.