【发布时间】:2017-07-30 04:41:42
【问题描述】:
我在保护我的 SQL 数据方面的经验绝对为零。我试图通过使用准备好的语句来防止对我的 Web 服务的注入攻击。我已经学习了几个教程,但是我实现的每个教程都杀死了我的 PHP 脚本。我该如何保护这个查询?
$value = (integer)$_GET["name"];
$sql = "SELECT `coordinates`, `center` , `content_string` FROM Regions WHERE `id` = {$value}";
$result = $conn->query($sql);
$rows = array();
if ($result->num_rows > 0) {
// output data of each row
while($r = mysqli_fetch_assoc($result)) {
$rows[] = $r;
}
}
这是我的尝试:
$value = (integer)$_GET["name"];
$sql = $dbConnection->prepare('SELECT `coordinates`, `center` , `content_string` FROM Regions WHERE `id` = ?');
$sql->bind_param('i', $value);
$sql->execute();
$result = $sql->get_result();
$rows = array();
if ($result->num_rows > 0) {
// output data of each row
while($r = mysqli_fetch_assoc($result)) {
$rows[] = $r;
}
}
我不太确定为什么这段代码不起作用。
【问题讨论】:
-
请展示您迄今为止在实现准备好的语句方面的最佳尝试,以便我们可以帮助您找出为什么它会杀死您的 PHP 脚本
-
查看此页面以获得一些建议:php.net/manual/en/mysqli.prepare.php。如果您有任何问题,请发布更新您的问题的错误。
-
为什么要混合 mysqli 调用的过程和面向对象风格?
-
代码到底是什么“不起作用”?你看到了什么错误(如果有的话)?
-
@BeetleJuice 我刚刚收到一个标准的 HTTP 500 错误,我知道它没有用