php的mysqli-> real_escape_string()将引号转换为htmlchars

时间:2015-10-28 20:40:27

标签: php mysql mysqli

非常简单的代码;接受用户输入的名称(引号/撇号有效),然后将其存储在mysql数据库中;

$this->sql = new mysqli($this->host, $this->user, $this->pass, $this->dbname);

$firstname = $this->sql->real_escape_string($firstname);
$lastname = $this->sql->real_escape_string($lastname);

$sql = "INSERT INTO users
        (firstname, lastname)
        ('{$firstname}', '{$lastname}')";

$this->sql->query($sql);

但是,在使用时,这会将所有引号/撇号转换为'

有人会对可能导致这种情况的想法有任何想法吗?我已经通过脚本检查了所有htmlspecialchars或其他被调用的方法。

1 个答案:

答案 0 :(得分:1)

这就是real_escap_string的作用。必须转义所有可用于执行SQL注入攻击的字符。请点击此处查看这些“符号”http://www.w3.org/MarkUp/html-spec/html-spec_13.html的完整列表 如果您显示它们,浏览器会将它们呈现为它们应该是什么样子,但它们不再影响您的查询。

如果您不想更改字符,我建议使用预准备语句。它们是防止SQL注入攻击的最佳方法。有关此主题的更多信息,请访问:http://php.net/manual/de/mysqli.quickstart.prepared-statements.php和此处:How can I prevent SQL injection in PHP?