【发布时间】:2013-07-12 04:39:29
【问题描述】:
我正在尝试将 mysqli 代码嵌入到我的网页中,以便消除 sql 注入。这是我的代码现在的样子:
$gYear = $_POST["year"];
$gYear2 = $_POST["year2"];
$gMonth = $_POST["month"];
$gSelect = $_POST["location"];
$query = $conn->prepare("SELECT $gSelect, Year FROM unemployed WHERE year BETWEEN '$gYear' AND '$gYear2' and month='$gMonth'");
$query->bind_param('ssss', $gyear, $gYear2, $gMonth, $gSelect);
$query->execute();
$result = $query->get_result();
while ($row = $result->fetch_object()){
// do something with gathered rows
}
现在,提交表单后,我收到两个错误。他们是这样说的:
Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters in prepared statement in
与
Fatal error: Call to undefined method mysqli_stmt::get_result() in
我真的不知道我的问题是什么。我尝试遵循How can I prevent SQL injection in PHP? 中列出的规则。有谁知道我的问题是什么?为什么我会收到这两条错误消息?任何帮助将不胜感激。
【问题讨论】:
-
很遗憾你没有关注他们;你的代码,如果它设法查询数据库,就会受到注入攻击。
-
您将变量值直接放入 SQL 查询中,而不是为参数使用占位符。当 MySQLi 看到查询时,它已经(通过 PHP)填写了所有值。
-
@user2562125 是的,该示例在查询中使用
?,而不是变量值。
标签: php mysql forms mysqli sql-injection