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

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

Barbara Streisand
Barbara Streisand原创
2024-12-21 18:03:23865浏览

How to Safely Include PHP Variables in MySQL INSERT Statements?

在 MySQL 语句中包含 PHP 变量

在这种情况下,您在将值插入“内容”表时遇到问题,特别是在 MySQL 语句的“VALUES”部分使用 PHP 变量“$type”时。让我们深入研究适当的方法。

1.使用准备好的语句(推荐)

此方法可以解决 99% 的查询,包括您的查询。表示 SQL 数据文字(字符串或数字)的任何变量都必须通过准备好的语句合并,无一例外。然而,静态值可以按原样插入。

准备过程需要四个阶段:

  • 为 SQL 语句中的变量指定占位符。
  • 准备修改后的查询。
  • 将变量绑定到相应的占位符。
  • 执行

以下是它在不同数据库驱动程序中的工作方式:

mysqli 与 PHP 8.2 :

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

mysqli与早期的 PHP版本:

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

PDO:

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

2。对查询部分实施白名单过滤

如果您需要包含代表 SQL 查询特定部分的变量,例如关键字、表或字段名称或运算符,请使用“白名单”来确保其有效性。

例如,如果变量表示按字段排序:

$allowed = ["name", "price", "qty"];
$key = array_search($orderby, $allowed, true);
if ($key === false) { throw new InvalidArgumentException("Invalid field name"); }

同样,检查有效排序方向:

$allowed = ["ASC", "DESC"];
$key = array_search($direction, $allowed, true);
if ($key === false) { throw new InvalidArgumentException("Invalid ORDER BY direction"); }

验证后,准备查询字符串,并记住根据 MySQL 语法正确转义标识符:

$query = "SELECT * FROM `table` ORDER BY `$orderby` $direction";

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

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