W3docs

PHP MySQL Select Where

Scopri come usare la clausola WHERE di MySQL in PHP per filtrare i risultati SELECT con operatori di confronto e istruzioni preparate PDO e MySQLi.

L'istruzione SELECT viene utilizzata per recuperare dati da un database. La clausola WHERE serve a filtrare i dati in base a condizioni specifiche. La clausola WHERE può essere combinata con l'istruzione SELECT per recuperare solo determinati dati dal database.

Di seguito è riportata la sintassi di base dell'istruzione SELECT con la clausola WHERE:

PHP / SQL sintassi di base dell'istruzione SELECT con la clausola WHERE

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

Nella sintassi precedente:

  • column1, column2, ... sono le colonne da cui si vogliono recuperare i dati.
  • table_name è il nome della tabella da cui si vogliono recuperare i dati.
  • condition è un'espressione logica che determina quali dati recuperare.

Esempio

Considera una tabella denominata customers con i seguenti dati:

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

Ecco un esempio di come utilizzare l'istruzione SELECT con la clausola WHERE per recuperare solo dati specifici dalla tabella customers:

PHP / SQL esempio di utilizzo dell'istruzione SELECT con la clausola WHERE per recuperare solo dati specifici dalla tabella customers

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

L'istruzione SELECT precedente restituirà solo le righe in cui la colonna country è uguale a USA. L'output sarà:

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

Condizioni Multiple

È possibile utilizzare più condizioni nella clausola WHERE. Ad esempio, si possono recuperare tutti i clienti dalla tabella customers che vivono negli USA e hanno un indirizzo email che termina con example.com.

PHP / SQL recupera tutti i clienti dalla tabella customers che vivono negli USA e hanno un indirizzo email che termina con example.com

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

L'istruzione SELECT precedente restituirà il seguente output:

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

È possibile utilizzare operatori logici come AND e OR per combinare più condizioni nella clausola WHERE. Quando si usano entrambi, racchiudi il gruppo OR tra parentesi affinché la precedenza sia quella attesa:

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

Operatori di Confronto e Logici

La condition in una clausola WHERE è costruita tramite operatori. Questi sono quelli che utilizzerai più spesso:

OperatoreSignificatoEsempio
=Uguale acountry = 'USA'
<> o !=Diverso dacountry <> 'UK'
>, <, >=, <=Maggiore / minore diid >= 2
BETWEENNell'intervallo inclusivoid BETWEEN 1 AND 3
INCorrisponde a un valore in un elencocountry IN ('USA', 'UK')
LIKECorrispondenza a pattern (% = qualsiasi carattere, _ = un carattere)email LIKE '%@example.com'
IS NULL / IS NOT NULLVerifica i valori mancantiemail IS NOT NULL
AND, OR, NOTCombina o nega le condizionicountry = 'USA' AND id > 1

Alcuni pattern comuni:

-- 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;

Eseguire una Query WHERE da PHP

Il titolo della pagina è "PHP MySQL", quindi ecco la parte che viene effettivamente eseguita in PHP. Poiché il valore di WHERE proviene quasi sempre dall'input dell'utente (un campo di ricerca, un parametro URL), non devi mai concatenarlo direttamente nella stringa SQL — questo aprirebbe la porta a iniezioni SQL. Utilizza invece un'istruzione preparata e associa il valore come parametro.

Esempio: filtraggio per paese con un'istruzione preparata 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 stessa query con MySQLi si presenta così:

Esempio: la stessa query 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 sulla sicurezza: Filtra sempre l'input fornito dall'utente tramite parametri associati (PDO o MySQLi), mai costruendo la stringa SQL con "... WHERE country = '$country'". Le istruzioni preparate mantengono separati dati e codice, il che previene le iniezioni SQL.

Argomenti Correlati

Esercitazione

Pratica
Qual è l'utilizzo della clausola WHERE in MySQL in PHP?
Qual è l'utilizzo della clausola WHERE in MySQL in PHP?
Was this page helpful?