在停止使用已弃用的 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 注入的影响吗?非常感谢谁会回答这个问题:)