PHP MySQL Select Where
Lerne, wie du die MySQL WHERE-Klausel in PHP einsetzt, um SELECT-Ergebnisse mit Vergleichs- und logischen Operatoren sowie sicheren PDO- und MySQLi-Prepared-Statements zu filtern.
Das SELECT-Statement wird verwendet, um Daten aus einer Datenbank abzurufen. Die WHERE-Klausel dient dazu, Daten anhand bestimmter Bedingungen zu filtern. Die WHERE-Klausel kann mit dem SELECT-Statement kombiniert werden, um nur bestimmte Daten aus der Datenbank abzurufen.
Hier ist die grundlegende Syntax des SELECT-Statements mit WHERE-Klausel:
PHP / SQL-Grundsyntax des SELECT-Statements mit WHERE-Klausel
SELECT column1, column2, ...
FROM table_name
WHERE condition;In der obigen Syntax gilt:
column1,column2, ... sind die Spalten, aus denen du Daten abrufen möchtest.table_nameist der Name der Tabelle, aus der du Daten abrufen möchtest.conditionist ein logischer Ausdruck, der bestimmt, welche Daten abgerufen werden.
Beispiel
Betrachte eine Tabelle namens customers mit den folgenden Daten:
| id | name | country | |
|---|---|---|---|
| 1 | John | [email protected] | USA |
| 2 | Jane | [email protected] | UK |
| 3 | Alice | [email protected] | France |
Hier ist ein Beispiel, wie du das SELECT-Statement mit WHERE-Klausel verwendest, um nur bestimmte Daten aus der customers-Tabelle abzurufen:
PHP / SQL-Beispiel für die Verwendung des SELECT-Statements mit WHERE-Klausel zum Abrufen bestimmter Daten aus der customers-Tabelle
SELECT name, email
FROM customers
WHERE country = 'USA';Das obige SELECT-Statement gibt nur die Zeilen zurück, in denen die Spalte country gleich USA ist. Die Ausgabe lautet:
name | email
----------|----------------------
John | [email protected]Mehrere Bedingungen
Du kannst in der WHERE-Klausel auch mehrere Bedingungen verwenden. Du kannst beispielsweise alle Kunden aus der customers-Tabelle abrufen, die in den USA leben und eine E-Mail-Adresse haben, die auf example.com endet.
PHP / SQL – alle Kunden aus der customers-Tabelle abrufen, die in den USA leben und eine E-Mail-Adresse haben, die auf example.com endet
SELECT name, email
FROM customers
WHERE country = 'USA'
AND email LIKE '%example.com';Das obige SELECT-Statement gibt folgende Ausgabe zurück:
name | email
----------|----------------------
John | [email protected]Du kannst logische Operatoren wie AND und OR verwenden, um mehrere Bedingungen in der WHERE-Klausel zu kombinieren. Wenn du sie mischst, setze die OR-Gruppe in Klammern, damit die Rangfolge wie erwartet ist:
SELECT name, email
FROM customers
WHERE country = 'USA'
AND (name = 'John' OR name = 'Alice');Vergleichs- und logische Operatoren
Die condition in einer WHERE-Klausel wird aus Operatoren aufgebaut. Das sind die am häufigsten verwendeten:
| Operator | Bedeutung | Beispiel |
|---|---|---|
= | Gleich | country = 'USA' |
<> oder != | Ungleich | country <> 'UK' |
>, <, >=, <= | Größer / kleiner als | id >= 2 |
BETWEEN | Innerhalb eines inklusiven Bereichs | id BETWEEN 1 AND 3 |
IN | Entspricht einem Wert in einer Liste | country IN ('USA', 'UK') |
LIKE | Musterabgleich (% = beliebige Zeichen, _ = ein Zeichen) | email LIKE '%@example.com' |
IS NULL / IS NOT NULL | Prüft auf fehlende Werte | email IS NOT NULL |
AND, OR, NOT | Bedingungen kombinieren oder negieren | country = 'USA' AND id > 1 |
Einige gebräuchliche Muster:
-- 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;Eine WHERE-Abfrage in PHP ausführen
Der Seitentitel lautet „PHP MySQL", hier ist also der Teil, der tatsächlich in PHP ausgeführt wird. Da der WHERE-Wert fast immer aus Benutzereingaben stammt (ein Suchfeld, ein URL-Parameter), darfst du ihn niemals direkt in den SQL-String einbauen – das öffnet die Tür für SQL-Injection. Verwende stattdessen ein Prepared Statement und binde den Wert als Parameter.
Beispiel: Filtern nach Land mit einem PDO Prepared Statement
<?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";
}Dieselbe Abfrage mit MySQLi sieht so aus:
Beispiel: dieselbe Abfrage mit 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";
}Sicherheitshinweis: Filtere benutzerseitige Eingaben immer über gebundene Parameter (PDO oder MySQLi) und baue den SQL-String niemals mit
"... WHERE country = '$country'"zusammen. Prepared Statements trennen Daten und Code, was SQL-Injection verhindert.
Verwandte Themen
- PHP MySQL Select — die
SELECT-Grundlagen, auf denen diese Klausel aufbaut. - PHP MySQL Order By — sortiere die Zeilen, die deine
WHERE-Klausel zurückgibt. - PHP MySQL Limit Data — begrenze die Anzahl der gefilterten Zeilen.
- PHP MySQL Prepared Statements — ein tieferer Blick auf das oben verwendete sichere Muster.