PHP MySQL WHERE 子句
                           
天天向上
发布: 2025-03-22 00:12:50

原创
65 人浏览过

在 PHP 中与 MySQL 交互时,WHERE 子句 用于筛选符合条件的记录。它常常与 SELECTUPDATEDELETE 语句一起使用,通过指定条件来限制查询、更新或删除的数据范围。

1. WHERE 子句的基本语法

SELECT column1, column2, ...
FROM table_name
WHERE condition;
  • condition:指定条件表达式,只有满足条件的记录才会被选中。
  • column1, column2:要查询的列。
  • table_name:数据表的名称。

在 PHP 中,通常通过 MySQLiPDO 来执行带有 WHERE 子句的查询。


2. 使用 MySQLi WHERE 子句

2.1 使用面向对象方式

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// SQL 查询,带有 WHERE 子句
$sql = "SELECT id, username, email FROM users WHERE username = 'john_doe'";
$result = $conn->query($sql);

// 检查结果
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. " - 用户名: " . $row["username"]. " - 邮箱: " . $row["email"]. "<br>";
    }
} else {
    echo "没有找到记录";
}

// 关闭连接
$conn->close();
?>

📌 解析

  • WHERE 子句:在查询中指定了 username = 'john_doe' 的条件,只有 username'john_doe' 的记录会被返回。
  • 使用 fetch_assoc() 获取每行数据,显示查询结果。

2.2 使用过程化方式

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);

// 检查连接
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}

// 执行查询,带有 WHERE 子句
$sql = "SELECT id, username, email FROM users WHERE username = 'john_doe'";
$result = mysqli_query($conn, $sql);

// 检查结果
if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        echo "ID: " . $row["id"]. " - 用户名: " . $row["username"]. " - 邮箱: " . $row["email"]. "<br>";
    }
} else {
    echo "没有找到记录";
}

// 关闭连接
mysqli_close($conn);
?>

📌 解析

  • 同样使用 WHERE 子句来筛选数据,username = 'john_doe' 作为查询条件。

3. 使用 PDO WHERE 子句

PDO 提供了更为安全的方式,支持预处理语句,防止 SQL 注入攻击。

3.1 使用 PDO 预处理语句与 WHERE 子句

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

try {
    // 创建 PDO 连接
    $pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // 设置错误模式
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 准备 SQL 查询,带有 WHERE 子句
    $stmt = $pdo->prepare("SELECT id, username, email FROM users WHERE username = :username");
    $stmt->bindParam(':username', $username);  // 绑定参数

    // 设置参数并执行
    $username = "john_doe";
    $stmt->execute();

    // 检查结果
    if ($stmt->rowCount() > 0) {
        // 输出每一行数据
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            echo "ID: " . $row['id'] . " - 用户名: " . $row['username'] . " - 邮箱: " . $row['email'] . "<br>";
        }
    } else {
        echo "没有找到记录";
    }
} catch (PDOException $e) {
    echo "错误: " . $e->getMessage();
}

// 关闭连接
$pdo = null;
?>

📌 解析

  • 预处理语句:使用 prepare() 创建 SQL 查询语句,bindParam() 绑定参数,确保安全执行查询。
  • :username:在查询中使用占位符(参数化查询)代替直接拼接变量,防止 SQL 注入。

4. WHERE 子句常见用法

4.1 使用多个条件(AND / OR)

你可以通过 ANDOR 来结合多个条件。

$sql = "SELECT id, username, email FROM users WHERE username = 'john_doe' AND email = 'john@example.com'";
  • AND:两个条件都必须为 TRUE
  • OR:任意一个条件为 TRUE

4.2 使用通配符(LIKE)

LIKE 用于模糊查询,可以配合 % 来使用通配符。

$sql = "SELECT id, username, email FROM users WHERE username LIKE '%john%'";
  • %:表示任意数量的字符。
  • _:表示单个字符。

4.3 使用范围(BETWEEN)

$sql = "SELECT id, username, email FROM users WHERE id BETWEEN 1 AND 10";
  • BETWEEN:选择在指定范围内的记录。

4.4 使用排序(ORDER BY)

$sql = "SELECT id, username, email FROM users WHERE username LIKE '%john%' ORDER BY id DESC";
  • ORDER BY:指定结果排序。

4.5 使用空值(IS NULL)

$sql = "SELECT id, username, email FROM users WHERE email IS NULL";
  • IS NULL:筛选字段值为空的记录。

总结

  • WHERE 子句 是查询中最常用的过滤条件,通过指定条件来限定查询的数据范围。
  • 在 PHP 中使用 MySQLiPDO 可以执行带有 WHERE 子句的 SQL 查询,确保查询数据的精确性。
  • 使用 预处理语句参数化查询 可以防止 SQL 注入,提高数据库操作的安全性。

更多详细内容请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *