这个mysqli准备好的陈述有多安全

时间:2013-09-29 14:39:54

标签: php mysql sql mysqli

以前我使用通用mysqli查询在数据库中插入值real_escape_string以确保安全性,但是每个人似乎都使用预准备语句来提高安全性。为了提高安全性并防止sql注入,我将用准备好的语句替换我的代码,但我想知道下面给出了多少安全准备语句。你能否提出更多改进以提高安全性?

$stmt = mysqli_prepare($DB_connection,"INSERT INTO `posts`(`example`, `example2`) VALUES ('$for_example',?)");
    mysqli_stmt_bind_param($stmt, 's', $_POST['username']);
    mysqli_stmt_execute($stmt);
    mysqli_stmt_close($stmt);

我使用POST方法从表单中获取值并将它们添加到数据库中。用户可以通过sql注入替换数据库中的值吗? 感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:0)

从PHP手册:

  

不需要引用准备语句的参数;该   驱动程序自动处理此如果应用程序专门使用   准备好的语句,开发人员可以肯定没有SQL注入   将发生(但是,如果正在构建查询的其他部分   使用非转义输入,SQL注入仍然可行。)

参考:Prepared statements and stored procedures

您正在使用(可能)非转义输入构建查询。这完全取决于$for_example是否安全......

因此,我的建议是在准备好的陈述中加入$for_example作为参数。