首页 >后端开发 >php教程 >如何在 MySQL 语句中安全地包含 PHP 变量?

如何在 MySQL 语句中安全地包含 PHP 变量?

Barbara Streisand
Barbara Streisand原创
2024-12-25 08:10:29264浏览

How Can I Safely Include PHP Variables in MySQL Statements?

在 MySQL 语句中包含 PHP 变量

在 VALUES 语句中使用 PHP 变量将值插入表时遇到问题。了解将 PHP 变量集成到 MySQL 语句中的正确方法至关重要。

利用准备好的语句

将数据文字(SQL 字符串或数字)插入 MySQL 语句需要使用准备好的语句。它涉及:

  1. 在 SQL 语句中用占位符替换变量
  2. 准备修改后的查询
  3. 将变量绑定到占位符
  4. 执行查询

添加使用 Mysqli 进行数据文字

在 PHP 8.2 中,这些步骤可以合并为一个调用:

$type = 'testing';
$reporter = "John O'Hara";
$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";
$mysqli->execute_query($sql, [$reporter, $description]);

对于较旧的 PHP 版本:

$type = 'testing';
$reporter = "John O'Hara";
$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss", $reporter, $description);
$stmt->execute();

添加数据文字PDO

PDO 提供了一种简化的方法:

$type = 'testing';
$reporter = "John O'Hara";
$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";
$stmt = $pdo->prepare($sql);
$stmt->execute([$reporter, $description]);

过滤其他查询部分的变量

代表查询部分的变量除文字(关键字、标识符)之外的内容应通过白名单进行过滤。这可以防止插入意外的值。

例如,根据用户输入过滤字段名称:

$orderby = $_GET['orderby'] ?: "name"; // set the default value
$allowed = ["name", "price", "qty"]; // the white list of allowed field names
$key = array_search($orderby, $allowed, true); // see if we have such a name
if ($key === false) { 
    throw new InvalidArgumentException("Invalid field name"); 
}

以上是如何在 MySQL 语句中安全地包含 PHP 变量?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn