防止 SQL 注入和抓取 ID


Preventing SQL injection and grabbing IDs

我以为我的代码阻止了SQL注入,但是在互联网上查看后,我意识到我错了。我通过以下方式获取 ID:

$id = mysqli_real_escape_string($_GET['id']);

我在互联网上了解到,使用 MySQL 真正的转义字符串实际上并不能阻止我进行 SQL 注入。但是,即使我尝试在我的服务器上使用它,它也给了我这个错误:

expects exactly 2 parameters, 1 given - Line: 4

不确定为什么我能够在测试环境 (wamp) 中使用它,但不能在这里。我想知道,获取ID和防止SQL注入的正确方法是什么?

我只会使用预准备语句并绑定值。就像这个例子。

$stmt = $mysqli->prepare("DELETE FROM tbl_users WHERE name = ?");
$stmt->bind_param("s", $name);
$stmt->execute();
$stmt->close();

正确的方法是使用预准备语句。就您的代码而言,您以错误的方式使用mysqli_real_escape_string。您还需要包含您的 mysqli 连接。

$id = mysqli_real_escape_string($mysqli, $_GET['id']);

使用预准备语句时,不需要这样做。