W3docs

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_name ist der Name der Tabelle, aus der du Daten abrufen möchtest.
  • condition ist ein logischer Ausdruck, der bestimmt, welche Daten abgerufen werden.

Beispiel

Betrachte eine Tabelle namens customers mit den folgenden Daten:

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

OperatorBedeutungBeispiel
=Gleichcountry = 'USA'
<> oder !=Ungleichcountry <> 'UK'
>, <, >=, <=Größer / kleiner alsid >= 2
BETWEENInnerhalb eines inklusiven Bereichsid BETWEEN 1 AND 3
INEntspricht einem Wert in einer Listecountry IN ('USA', 'UK')
LIKEMusterabgleich (% = beliebige Zeichen, _ = ein Zeichen)email LIKE '%@example.com'
IS NULL / IS NOT NULLPrüft auf fehlende Werteemail IS NOT NULL
AND, OR, NOTBedingungen kombinieren oder negierencountry = '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

Übung

Übung
Wozu dient die WHERE-Klausel in MySQL in PHP?
Wozu dient die WHERE-Klausel in MySQL in PHP?
Was this page helpful?