哪个是安全的MySQLi查询?

时间:2015-02-19 12:35:31

标签: php mysql mysqli

哪一项是对的,真的很安全? 使用准备好的陈述:

$stmt= $db->prepare("INSERT INTO books (title) VALUES (?)");
$booktitle=$_POST['booktitle'];
$stmt->bind_param('s', $booktitle);   
$stmt->execute();

或使用转义功能:

$unsafe_variable = $login;
$safe_variable = mysqli_real_escape_string($unsafe_variable);
$stm=mysqli_query($db,"SELECT post_amount FROM users WHERE login='" . $safe_variable . "'");
$stmone=mysqli_fetch_assoc($stm);
$stmtwo=implode($stmone);
echo($stmtwo);

请帮忙处理。

3 个答案:

答案 0 :(得分:3)

第一种选择方式更好。我不能强调这一点。它不仅可以确保您始终自动处理事务,还可以为您提供更清晰的代码。如果你不使用准备好的陈述,那么只需要在你的卫生设施中错过一次,你就会对攻击敞开大门。地狱,准备好的陈述是mysqli首先被引入的原因的一半。

答案 1 :(得分:0)

第一个选项更好,它可以为您提供干净的代码并自动处理所有事情

答案 2 :(得分:0)

技术上两者都是安全的。

但是,使用预准备语句会强制您转义所有变量。您不能错过使用预准备语句的escape_string电话。

另请参阅PDO,它有更好的方式来处理预先准备好的语句:)