W3docs

PHP MySQL SELECT WHERE

Узнайте, как использовать WHERE в MySQL в PHP для фильтрации SELECT с операторами сравнения, логическими операторами и подготовленными запросами.

Оператор SELECT используется для выборки данных из базы данных. Предложение WHERE применяется для фильтрации данных на основе определённых условий. Предложение WHERE можно объединять с оператором SELECT, чтобы извлекать из базы данных только нужные данные.

Ниже приведён базовый синтаксис оператора SELECT с предложением WHERE:

PHP / SQL — базовый синтаксис оператора SELECT с предложением WHERE

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

В приведённом синтаксисе:

  • column1, column2, ... — столбцы, из которых нужно получить данные.
  • table_name — название таблицы, из которой нужно получить данные.
  • condition — логическое выражение, определяющее, какие данные следует извлечь.

Пример

Рассмотрим таблицу customers со следующими данными:

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

Ниже приведён пример использования оператора SELECT с предложением WHERE для извлечения только определённых данных из таблицы customers:

PHP / SQL — пример использования оператора SELECT с предложением WHERE для извлечения определённых данных из таблицы customers

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

Приведённый оператор SELECT вернёт только строки, в которых столбец country равен USA. Результат будет следующим:

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

Несколько условий

В предложении WHERE можно использовать несколько условий. Например, можно извлечь всех клиентов из таблицы customers, которые проживают в USA и имеют адрес электронной почты, заканчивающийся на example.com.

PHP / SQL — получение всех клиентов из таблицы customers, проживающих в USA и имеющих адрес электронной почты, заканчивающийся на example.com

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

Приведённый оператор SELECT вернёт следующий результат:

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

Для объединения нескольких условий в предложении WHERE можно использовать логические операторы AND и OR. При их совместном использовании группу OR следует заключать в скобки, чтобы приоритет выполнения соответствовал ожиданиям:

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

Операторы сравнения и логические операторы

Условие condition в предложении WHERE строится из операторов. Вот наиболее часто используемые из них:

ОператорЗначениеПример
=Равноcountry = 'USA'
<> или !=Не равноcountry <> 'UK'
>, <, >=, <=Больше / меньшеid >= 2
BETWEENВ заданном включительном диапазонеid BETWEEN 1 AND 3
INСовпадает с любым значением из спискаcountry IN ('USA', 'UK')
LIKEПоиск по шаблону (% = любые символы, _ = один символ)email LIKE '%@example.com'
IS NULL / IS NOT NULLПроверка на отсутствие значенияemail IS NOT NULL
AND, OR, NOTОбъединение или отрицание условийcountry = 'USA' AND id > 1

Несколько распространённых шаблонов:

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

Выполнение запроса WHERE из PHP

Заголовок страницы — «PHP MySQL», поэтому далее рассматривается часть, которая реально выполняется в PHP. Поскольку значение WHERE почти всегда поступает из пользовательского ввода (поле поиска, параметр URL), его нельзя напрямую конкатенировать в строку SQL — это открывает дверь для SQL-инъекций. Вместо этого используйте подготовленный запрос и передавайте значение как параметр.

Пример: фильтрация по стране с помощью подготовленного запроса 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";
}

Тот же запрос с использованием MySQLi выглядит следующим образом:

Пример: тот же запрос с 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";
}

Примечание по безопасности: всегда передавайте пользовательские данные через связанные параметры (PDO или MySQLi), никогда не строя SQL-строку вида "... WHERE country = '$country'". Подготовленные запросы разделяют данные и код, что предотвращает SQL-инъекции.

Связанные темы

  • PHP MySQL Select — основы SELECT, на которых строится это предложение.
  • PHP MySQL Order By — сортировка строк, возвращаемых предложением WHERE.
  • PHP MySQL Limit Data — ограничение количества возвращаемых отфильтрованных строк.
  • PHP MySQL Prepared Statements — подробный разбор безопасного шаблона, использованного выше.

Практика

Практика
Для чего используется предложение WHERE в MySQL в PHP?
Для чего используется предложение WHERE в MySQL в PHP?
Was this page helpful?