PHP MySQL 预处理语句学习笔记

什么是预处理语句

预处理语句是一种在客户端(PHP)和服务器(MySQL)之间执行 SQL 语句的方法。它允许我们预处理 SQL 语句,然后动态地将参数绑定到语句中。这样可以大大提高应用程序的安全性,并且可以更有效地利用数据库服务器资源。

使用预处理语句的好处

使用预处理语句的好处如下:

  1. 提高应用程序的安全性。预处理语句可以防止 SQL 注入攻击,这是一种常见的攻击方式,可以通过输入恶意代码来破坏数据库。

  2. 更有效地利用数据库服务器资源。由于预处理语句在服务器端准备并编译,因此可以重复使用已编译的语句,从而减少服务器负载。

  3. 简化代码。使用预处理语句可以减少代码复杂性,使代码更易于编写、维护和调试。

如何使用预处理语句

在 PHP 中,使用 PDO 扩展可以通过以下步骤使用预处理语句:

  1. 创建一个 PDO 对象。在创建 PDO 对象时,需要指定数据库的连接信息。

    Copy Code
    $dsn = 'mysql:host=localhost;dbname=mydb'; $username = 'myuser'; $password = 'mypass'; $pdo = new PDO($dsn, $username, $password);
  2. 准备 SQL 语句。在准备 SQL 语句时,需要使用占位符(?)来表示动态参数。

    Copy Code
    $stmt = $pdo->prepare('SELECT * FROM mytable WHERE id = ?');
  3. 绑定参数。在执行 SQL 语句之前,需要将动态参数绑定到占位符上。

    Copy Code
    $id = 1; $stmt->bindParam(1, $id);
  4. 执行 SQL 语句。在执行 SQL 语句时,可以使用 execute() 方法。

    Copy Code
    $stmt->execute();
  5. 获取查询结果。在查询结果时,可以使用 fetchAll() 方法获取所有结果集,也可以使用 fetch() 方法获取一行结果集。

    Copy Code
    $result = $stmt->fetchAll(PDO::FETCH_ASSOC);

示例

下面是一个使用预处理语句的示例,该示例从数据库中获取多个用户的信息。假设有一个名为 users 的表,其中包含 idnameage 三列。

Copy Code
$dsn = 'mysql:host=localhost;dbname=mydb'; $username = 'myuser'; $password = 'mypass'; $pdo = new PDO($dsn, $username, $password); $stmt = $pdo->prepare('SELECT * FROM users WHERE age > ?'); $age = 18; $stmt->bindParam(1, $age); $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($result as $row) { echo $row['id'] . ' - ' . $row['name'] . ' - ' . $row['age'] . '<br>'; }

在上面的示例中,首先创建了一个 PDO 对象,然后准备了一个 SQL 语句,其中使用了占位符 ? 表示动态参数。然后将要查询的年龄值 18 绑定到这个占位符上,并执行 SQL 语句,最后通过 fetchAll() 方法获取所有结果集并遍历输出。