在 VALUES 语句中使用 PHP 变量将值插入表时遇到问题。了解将 PHP 变量集成到 MySQL 语句中的正确方法至关重要。
将数据文字(SQL 字符串或数字)插入 MySQL 语句需要使用准备好的语句。它涉及:
在 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 提供了一种简化的方法:
$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中文网其他相关文章!