Php 合并变量对SQL注入安全吗?

Php 合并变量对SQL注入安全吗?,php,mysql,sql-injection,Php,Mysql,Sql Injection,我有一些用户输入 $place = $_POST["errorreport_place"]; $os = $_POST["errorreport_os"]; $browser = $_POST["errorreport_browser"]; $text_user = $_POST["errorreport_text_user"]; $section = $_GET["section"]; 还有一些不是由用户创建的会话变量(它们来自数据库) 现在,我正在将所有这些用户创建的变量合并为一个文本字符

我有一些用户输入

$place = $_POST["errorreport_place"];
$os = $_POST["errorreport_os"];
$browser = $_POST["errorreport_browser"];
$text_user = $_POST["errorreport_text_user"];
$section = $_GET["section"];
还有一些不是由用户创建的会话变量(它们来自数据库)

现在,我正在将所有这些用户创建的变量合并为一个文本字符串

$text = "ERROR REPORTED BY $username (ID: $user_id)<br /><br />Place: $place<br />Operating System: $os<br />Browser: $browser<br />Text:<br />$text";

现在我的问题是:这个方法对SQL注入安全吗(因为我没有单独准备每个用户输入?

您的方法是安全的。插入前的连接,而使用准备好的语句,并不重要。准备好的语句将把整个
$text
值作为一个完整的字符串准备好插入,这个字符串仍然与查询本身是分开的。

您的方法是安全的,因为您的方法是安全的。)重新使用准备好的语句。
$sql=$db->prepare(“插入到错误报告(用户id、节、文本、完成)值(?、、、?)”;


当您将数据与查询混合时,可能会发生SQL注入。准备好的语句可确保将查询和数据分别发送到服务器

您正在根据
$SQL->bind_param('issi',$user_id,$section,$text,$done)绑定变量
。每一个的来源和内容都是不相关的。绑定本身也不会改变它们。它只是确保它们的值与SQL查询分开传输。可能更适合代码审查,另外,不要将XSS利用/注入排除在外。
$text = "ERROR REPORTED BY $username (ID: $user_id)<br /><br />Place: $place<br />Operating System: $os<br />Browser: $browser<br />Text:<br />$text";
$done = 0;
$sql = $db->prepare("INSERT INTO errorreports (user_id, section, text, done) VALUES (?, ?, ?, ?)");
$sql->bind_param('issi', $user_id, $section, $text, $done);
$sql->execute();