问题:
在 PHP 中,在 MySQL 语句中使用变量VALUES 中包含的 MySQL 语句会导致
问题:
为什么在 VALUES 中包含变量会导致错误?
答案:
有两种不同的方法可以在 MySQL 语句中包含 PHP 变量正确:
使用准备语句:
对于表示 SQL 数据文字(字符串、数字)的变量,必须使用准备语句。这涉及到:
示例(mysqli):
$type = 'testing'; $sql = "INSERT INTO contents (type, reporter, description) VALUES ('whatever', ?, ?)"; $mysqli->execute_query($sql, [$type, $reporter, $description]);
使用白名单过滤:
对于表示查询部分的任何其他变量(例如关键字、标识符),必须通过白名单过滤它们,确保仅使用允许的值。 示例(检查 orderby):
$orderby = $_GET['orderby'] ?: 'name'; $allowed = ['name', 'price', 'qty']; $key = array_search($orderby, $allowed); if ($key === false) throw new InvalidArgumentException("Invalid field name");
结论:
遵守这些原则可以防止 SQL 注入和确保涉及 PHP 变量时查询的正确执行。准备好的语句应用于数据文字,而白名单可确保仅允许的值插入查询的其他部分。
以上是为什么 PHP 变量在 MySQL 的 VALUES 子句中使用时会导致错误?的详细内容。更多信息请关注PHP中文网其他相关文章!