首页 > 数据库 > mysql教程 > 如何安全地将 PHP 变量插入 MySQL 查询?

如何安全地将 PHP 变量插入 MySQL 查询?

Linda Hamilton
发布: 2025-01-25 16:42:11
原创
803 人浏览过

How to Safely Insert PHP Variables into MySQL Queries?

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

在尝试使用PHP变量作为SQL语句的一部分将值插入MySQL表时,可能会遇到问题。为确保正确执行,务必遵循以下规则:

1. 使用预处理语句

预处理语句对于添加表示SQL数据文字(字符串或数字)的PHP变量至关重要。必须在SQL语句中用占位符替换变量,然后准备、绑定和执行查询。

以下是使用mysqli的示例:

<code><br></br>$type = 'testing';<br></br>$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";<br></br>$stmt = $mysqli->prepare($sql);<br></br>$stmt->bind_param("ss", $reporter, $description);<br></br>$stmt->execute();<br></br></code>
登录后复制

对于PDO,绑定和执行部分可以组合:

<code><br></br>$sql = "INSERT INTO contents (type,reporter,description) VALUES ('whatever',?,?)";<br></br>$stmt = $pdo->prepare($sql);<br></br>$stmt->execute([$reporter, $description]);<br></br></code>
登录后复制

2. 实现白名单过滤

如果PHP变量表示查询的一部分(超出数据文字),例如关键字或标识符,则必须针对预定义的允许值“白名单”进行检查。这确保只有有效值包含在查询字符串中。

以下是针对排序字段名称的白名单过滤示例:

<code><br></br>$orderby = $_GET['orderby'] ?: "name"; // 设置默认值<br></br>$allowed = ["name", "price", "qty"]; // 允许的字段名称白名单<br></br>$key = array_search($orderby, $allowed, true);<br></br>if ($key === false) {throw new InvalidArgumentException("无效的字段名称");<p>}<br></br></p></code>
登录后复制

白名单过滤后,可以安全地将$orderby变量包含在SQL查询中。

以上是如何安全地将 PHP 变量插入 MySQL 查询?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板