mysqli的准备语句(SQL注入预防)(Mysqli prepared statement (SQ

2019-07-17 22:14发布

停止使用的过时mysql_ *函数后,我切换到mysqli的。 但后来,我注意到,非准备语句是针对SQL注入非安全。 然后,我又改变了我的代码。

我曾是下面的函数来检查,如果在数据库中存在变量$ ID和打印标题该行的价值:

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注入? 非常感谢谁就将回答这个问题:)

Answer 1:

你mysqli的逻辑似乎很动听,也有在一些例子在这里PHP手册如果你还没有看到他们。

你为什么选择ID时,虽然不是消费呢? 同时你并不真的需要时,它只会有一个排的整个结果集,因为我认为在这种情况下会发生(ID是在表中唯一索引),使用返回的结果绑定get_result代替。

使用mysqli的准备将防止所有常见的注入攻击,但尚未去到驾驶员尚未0天风格的东西。



Answer 2:

看看这篇文章:

是PDO准备足以防止SQL注入语句?

它使用PDO,而不是库MySQLi,这是解决通过创建预处理语句同样的问题。

对不起,不回答你的问题,但只是想提供的资源为你考虑。



文章来源: Mysqli prepared statement (SQL injection prevention)