在尝试使用PHP变量作为SQL语句的一部分将值插入MySQL表时,可能会遇到问题。为确保正确执行,务必遵循以下规则:
预处理语句对于添加表示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>
如果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中文网其他相关文章!