PHP MySQL 预处理语句学习笔记
什么是预处理语句
预处理语句是一种在客户端(PHP)和服务器(MySQL)之间执行 SQL 语句的方法。它允许我们预处理 SQL 语句,然后动态地将参数绑定到语句中。这样可以大大提高应用程序的安全性,并且可以更有效地利用数据库服务器资源。
使用预处理语句的好处
使用预处理语句的好处如下:
-
提高应用程序的安全性。预处理语句可以防止 SQL 注入攻击,这是一种常见的攻击方式,可以通过输入恶意代码来破坏数据库。
-
更有效地利用数据库服务器资源。由于预处理语句在服务器端准备并编译,因此可以重复使用已编译的语句,从而减少服务器负载。
-
简化代码。使用预处理语句可以减少代码复杂性,使代码更易于编写、维护和调试。
如何使用预处理语句
在 PHP 中,使用 PDO 扩展可以通过以下步骤使用预处理语句:
-
创建一个 PDO 对象。在创建 PDO 对象时,需要指定数据库的连接信息。
Copy Code$dsn = 'mysql:host=localhost;dbname=mydb'; $username = 'myuser'; $password = 'mypass'; $pdo = new PDO($dsn, $username, $password);
-
准备 SQL 语句。在准备 SQL 语句时,需要使用占位符(?)来表示动态参数。
Copy Code$stmt = $pdo->prepare('SELECT * FROM mytable WHERE id = ?');
-
绑定参数。在执行 SQL 语句之前,需要将动态参数绑定到占位符上。
Copy Code$id = 1; $stmt->bindParam(1, $id);
-
执行 SQL 语句。在执行 SQL 语句时,可以使用
execute()
方法。Copy Code$stmt->execute();
-
获取查询结果。在查询结果时,可以使用
fetchAll()
方法获取所有结果集,也可以使用fetch()
方法获取一行结果集。Copy Code$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
示例
下面是一个使用预处理语句的示例,该示例从数据库中获取多个用户的信息。假设有一个名为 users
的表,其中包含 id
、name
和 age
三列。
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()
方法获取所有结果集并遍历输出。