Php 这个mysqli准备好的语句有多安全

Php 这个mysqli准备好的语句有多安全,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,以前,为了安全起见,我使用generalmysqli查询在数据库中插入带有real\u escape\u string的值,但每个人似乎都使用准备好的语句来提高安全性。为了提高安全性并防止sql注入,我将用prepared语句替换代码,但我想知道下面给出的prepared语句有多安全。你能建议更多的改进以提高安全性吗 $stmt = mysqli_prepare($DB_connection,"INSERT INTO `posts`(`example`, `example2`) VALUES (

以前,为了安全起见,我使用general
mysqli
查询在数据库中插入带有
real\u escape\u string
的值,但每个人似乎都使用准备好的语句来提高安全性。为了提高安全性并防止sql注入,我将用prepared语句替换代码,但我想知道下面给出的prepared语句有多安全。你能建议更多的改进以提高安全性吗

$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注入替换数据库中的值吗?
提前感谢您的帮助。

来自PHP手册:

编制报表的参数不需要引用;这个 驱动程序会自动处理这个问题。如果应用程序专门使用 编写语句后,开发人员可以确保没有SQL注入 将发生(但是,如果正在构建查询的其他部分 对于未切换的输入,SQL注入仍然是可能的)

参考:


您正在使用(可能)未扫描的输入构建查询。这完全取决于
$是否安全


因此,我的建议是将
$for_example
作为一个参数包含在您准备的语句中。

什么是
$for_example
?我将用如下会话变量
$替换
$for_example
etc
$例如
是会话变量。但它是否是用户输入的?如果用户登录,它来自数据库。我希望我可以取消查看最后的注释。@YourCommonSense:你是对的。为了将来的参考,我删除了我的评论。最好将所述变量也作为参数传递。