W3docs

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:

idnameemailcountry
1John[email protected]USA
2Jane[email protected]UK
3Alice[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:

OperadorSignificadoExemplo
=Igual acountry = 'USA'
<> ou !=Diferente decountry <> 'UK'
>, <, >=, <=Maior / menor queid >= 2
BETWEENDentro de um intervalo inclusivoid BETWEEN 1 AND 3
INCorresponde a qualquer valor em uma listacountry IN ('USA', 'UK')
LIKECorrespondência de padrão (% = qualquer caractere, _ = um caractere)email LIKE '%@example.com'
IS NULL / IS NOT NULLTesta valores ausentesemail IS NOT NULL
AND, OR, NOTCombina ou nega condiçõescountry = '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

Prática

Prática
Qual é o uso da cláusula WHERE no MySQL em PHP?
Qual é o uso da cláusula WHERE no MySQL em PHP?
Was this page helpful?