0Pricing
PHP Academy · 课时

预处理语句

使用预处理语句保护数据库查询

预处理语句 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 5 节课,共 6 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 6 节课。

预处理语句概览

预处理语句

欢迎来到下一课!在本课中,您将学习预处理语句,以及它们如何让数据库交互更加安全高效。让我们开始吧!

预处理语句 — 插图 1

什么是预处理语句?

什么是预处理语句?

预处理语句是数据库管理系统的一项功能,可让您安全高效地执行 SQL 查询。它们将 SQL 代码与数据分离,从而防止 SQL 注入攻击。

示例:使用占位符(:name、:email),而不是将用户输入直接嵌入查询中。

为什么使用预处理语句?

为什么使用预处理语句?

预处理语句具有以下几项优势:

  • 安全性:通过转义用户输入来防止 SQL 注入。
  • 效率:使用不同数据重复利用同一条语句,从而减少查询解析时间。
  • 可维护性:让代码更易于阅读和调试。

重点:处理用户提供的数据时,请始终使用预处理语句。

创建预处理语句

创建预处理语句

要创建预处理语句,请按照以下步骤操作:

  1. 使用占位符编写 SQL 查询。
  2. 使用数据库连接预处理查询。
  3. 将值绑定到占位符。
  4. 执行语句。

示例:

提示:使用关联数组可以轻松绑定值。

<?php
  $sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
  $stmt = $pdo->prepare($sql);
  $stmt->execute(["name" => "Alice", "email" => "alice@mail.com"]);
?>

绑定值

绑定值

使用 bindParam() 或 bindValue() 方法将值绑定到占位符。示例:

<?php
  $stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
  $stmt->bindParam(":name", $name);
  $stmt->bindParam(":email", $email);

  $name = "Bob";
  $email = "bob@mail.com";
  $stmt->execute();
?>

使用预处理语句执行 SELECT 查询

使用预处理语句执行 SELECT 查询

预处理语句适用于所有类型的 SQL 查询,包括 SELECT。示例:

提示:使用 fetchAll() 获取多行数据。

<?php
  $sql = "SELECT * FROM users WHERE name = :name";
  $stmt = $pdo->prepare($sql);
  $stmt->execute(["name" => "Alice"]);
  $result = $stmt->fetch(PDO::FETCH_ASSOC);

  echo "Name: " . $result["name"] . ", Email: " . $result["email"];
?>

重复使用预处理语句

重复使用预处理语句

预处理语句可以使用不同的值重复执行,从而提高效率。示例:

<?php
  $stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");

  $users = [
    ["name" => "Charlie", "email" => "charlie@mail.com"],
    ["name" => "Dave", "email" => "dave@mail.com"]
  ];

  foreach ($users as $user) {
    $stmt->execute($user);
  }

  echo "Multiple records inserted successfully!";
?>

防止 SQL 注入

防止 SQL 注入

预处理语句会转义用户输入中的特殊字符,从而防止 SQL 注入攻击。示例:

<?php
  $sql = "SELECT * FROM users WHERE email = :email";
  $stmt = $pdo->prepare($sql);
  $stmt->execute(["email" => "' OR 1=1; --"]);
  $result = $stmt->fetch();

  if ($result) {
    echo "User found.";
  } else {
    echo "No user found.";
  }
?>

做得很好!

做得很好!

恭喜您!您已经学会了如何在 PHP 中使用预处理语句来保护数据库交互。在下一课中,我们将探索使用连接和聚合的高级查询技术。让我们继续编写代码吧!

预处理语句 — 插图 10

常见问题解答

「预处理语句」课时是免费的吗?

是的 — 「预处理语句」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 6 节课。

「预处理语句」这节课中我会学到什么?

使用预处理语句保护数据库查询 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 PHP Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 5 节课,共 6 节。

「预处理语句」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 PHP Academy 课中编写并运行代码吗?

能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 数据库入门
  2. 连接 MySQL 数据库
  3. 管理表格
  4. 执行 CRUD 操作
  5. 预处理语句
  6. 使用 PDO
← 返回 PHP Academy