首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP中$mysqli->real_escape_string的正确用法

PHP中$mysqli->real_escape_string的正确用法
EN

Stack Overflow用户
提问于 2015-11-16 06:08:07
回答 1查看 46关注 0票数 0

当我调用$mysqli->real_escape_string($str)时,我会得到一个可以在查询中使用的安全字符串。它具有所有可以导致SQL注入攻击逃逸的特殊符号。

我的问题是-在以后的查询中使用它的正确方式是什么?我是用单引号还是双引号引用这个安全字符串?

例如,

代码语言:javascript
运行
复制
$safe_title = $mysqli->real_escape_string($_POST['safe_title']);

现在我要这样做:

代码语言:javascript
运行
复制
$r = $mysqli->query("SELECT * FROM articles WHERE title='$safe_title'");

或者这样:

代码语言:javascript
运行
复制
$r = $mysqli->query('SELECT * FROM articles WHERE title="'.$safe_title.'"');

有时我做一个,有时做另一个,但这一次,当我做了其中一个,并在输入中输入了一堆垃圾,不知何故,我得到了一个SQL查询错误。我意识到我做错了,我所有的代码都可能是易受攻击的。这就是我在这里问这个问题的原因。

EN

回答 1

Stack Overflow用户

发布于 2015-11-16 11:23:56

你会这样做:$r = $mysqli->query("SELECT * FROM articles WHERE title='$safe_title'");

但正如@JordiKroon指出的那样,准备好的语句是首选的。

代码语言:javascript
运行
复制
$stmt = $mysqli->prepare("SELECT * FROM articles WHERE title=?");
$stmt->bind_param("s", $safe_title);
$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_array(MYSQLI_NUM))
{
    foreach ($row as $r)
    {
        print "$r ";
    }
    print "\n";
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33725705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档