English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP Основной учебник

PHP Уровень продвинутый

PHP & MySQL

PHP Референс Манифест

WHERE PHP MySQL

В этом руководстве вы узнаете, как использовать PHP для чтения записей из таблицы MySQL数据库 по определенным условиям.

Фильтрация записей

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

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

SELECT column_name(s) FROM table_name WHERE column_name operator value

Давайте выполним SQL-запрос с помощью подзапроса WHERE и передадим его функции mysqli_query() в PHP для выполнения запроса и получения фильтрованных данных.
Предположим, что в базе данных demo есть таблица persons, которая содержит следующие записи:

+----+------------+-----------+----------------------+
| id | first_name | last_name | email               |
+----+------------+-----------+----------------------+
|  1 | Peter      | Parker    | [email protected] |
|  2 | John       | Rambo     | [email protected]   |
|  3 | Clark      | Kent      | [email protected]   |
|  4 | John       | Carter    | [email protected]  |
|  5 | Harry      | Potter    | [email protected] |
+----+------------+-----------+----------------------+

以下PHP代码从persons在表中读取 first_name ='john' 的所有行:

示例:面向过程方式

<?php
/*尝试连接MySQL服务器。假设您正在运行MySQL。
具有默认设置的服务器(没有密码的用户“root”)*/
$link = mysqli_connect("localhost", "root", "", "demo");
 
//检查连接
if($link === false){
    die("错误:无法连接。 " . mysqli_connect_error());
}
 
//Попытка выполнения запроса
$sql = "SELECT * FROM persons WHERE first_name='john'";
if($result = mysqli_query($link, $sql)){
    if(mysqli_num_rows($result) > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = mysqli_fetch_array($result)){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        //关闭结果集
        mysqli_free_result($result);
    } else{
        echo "Не найдены записи, соответствующие вашему запросу.";
    }
} else{
    echo "错误:无法执行 $sql. " . mysqli_error($link);
}
 
//Закрыть соединение
mysqli_close($link);
?>

示例:面向对象方式

<?php
/*尝试连接MySQL服务器。假设您正在运行MySQL。
具有默认设置的服务器(没有密码的用户“root”)*/
$mysqli = new mysqli("localhost", "root", "", "demo");
 
//检查连接
if($mysqli === false){
    die("错误:无法连接。 " . $mysqli->connect_error);
}
 
//Попытка выполнения запроса
$sql = "SELECT * FROM persons WHERE first_name='john'";
if($result = $mysqli->query($sql)){
    if($result->num_rows > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch_array()){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        //Освободить результат
        $result->free();
    } else{
        echo "Не найдены записи, соответствующие вашему запросу.";
    }
} else{
    echo "错误:无法执行 $sql. " . $mysqli->error;
}
 
//Закрыть соединение
$mysqli->close();
?>

示例:PDO方式

<?php
/*尝试连接MySQL服务器。假设您正在运行MySQL。
具有默认设置的服务器(没有密码的用户“root”)*/
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", \
    //设置PDO错误模式为异常
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("Ошибка: Невозможно подключиться. " . $e->getMessage());
}
 
//Попытка выполнения запроса
try{
    $sql = "SELECT * FROM persons WHERE first_name='john'";  
    $result = $pdo->query($sql);
    if($result->rowCount() > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch()){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        //Освободить результат
        unset($result);
    } else{
        echo "Не найдены записи, соответствующие вашему запросу.";
    }
} catch(PDOException $e){
    die("Ошибка: Невозможно выполнить $sql. " . $e->getMessage());
}
 
//Закрыть соединение
unset($pdo);
?>

После фильтрации, результат будет выглядеть следующим образом:

+----+------------+-----------+---------------------+
| id | first_name | last_name | email               |
+----+------------+-----------+---------------------+
|  2 | John       | Rambo     | [email protected]  |
|  4 | John       | Carter    | [email protected] |
+----+------------+-----------+---------------------+