微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mysqli准备的语句防止SQL注入

如何解决Mysqli准备的语句防止SQL注入

您的MysqLi逻辑看起来不错,如果您没有看到它们,则PHP手册中有一些示例。

为什么不使用时选择ID?另外,当只需要在完整结果集中返回一行时,您实际上就不需要绑定结果,因为我认为在这种情况下会发生这种情况(ID是表中的唯一索引),请改用get_result

使用MysqLi prepare可以防止所有常见的注入攻击,但不能针对0天风格的东西(尚未安装到驱动程序中)。

解决方法

停止使用不推荐使用的mysql_ *函数后,我切换到mysqli。但是后来,我注意到未准备好的语句对于SQL注入是不安全的。然后,我再次更改了代码。

我所拥有的是以下函数,该函数检查数据库中是否存在变量 $ ID 并打印该行的 title 值:

function showPostTitle($ID,$mysqli) {
    $result = $mysqli -> query("SELECT ID,title FROM blog where ID = $ID");
    $row = $result -> fetch_array(MYSQLI_BOTH);
    echo $row['title'];
}

我将其更改为:

function showPostTitle($ID,$mysqli) {
    $stmt = $mysqli -> prepare("SELECT ID,title FROM blog WHERE ID = ?");
    $stmt -> bind_param("i",$ID);
    $stmt -> execute();
    $stmt -> bind_result($ID,$title);
    $stmt -> fetch();
    print_r($title);
    $stmt -> free_result();
}

我的问题是:这是执行准备好的语句的正确方法吗?另外,我现在可以安全使用SQL注入吗?非常感谢任何愿意回答这个问题的人:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。