1

我想知道在此代码中的何处添加$stmt ->real_escape_string($password);以防止 mysql 注入:

if ($stmt = $this->connect->prepare($sql)) {
  $stmt->bind_param('ss', $username, $password);
  $stmt->execute();
}

是在prepare语句之后还是之前,因为我已经读过在转义之前我必须先有一个connect语句,所以我的猜测是在prepare语句之后,对吗?

关于mysql注入我还应该知道什么?

4

1 回答 1

4

你没有。

准备好的语句所做的部分工作是为您转义数据。因此,如果您将其绑定为参数,则无需转义任何内容。事实上,如果你确实添加了它,你会在奇怪的地方看到反斜杠等。

您唯一需要使用real_escape_string, 的情况是当您将变量作为值直接插入到 SQL 字符串中时。如果有人这样做,他们可能想要仔细检查他们对准备好的陈述的全部理解。:)

于 2012-04-08T10:05:34.797 回答