我一直在阅读有关使用$ _POST值直接在isert语句中使用的方法,并且了解这是麻烦的诱因。我读过的任何帖子中都不清楚的是-假设我的表单向我的mysqli插入脚本发送了7个项目,并且我使用这样的发布值:
$stmt = $mysqli->prepare("INSERT INTO `advertisements` (`from`, `r_u_res`, `email`, `blockname`, `floorno`, `doorno`, `content`) VALUES (?, ?, ?, ?, ?,?,?)");
$stmt->bind_param('sssssss', $_POST['from'], $_POST['rures'], $_POST['email'], $_POST['blockname'], $_POST['floorno'], $_POST['doorno'], $_POST['content']);
$stmt->execute();
$stmt->close();
这是正确的方法吗?还是应该先将发布的值存储在新变量中,然后在绑定时使用该变量? -像这样:
$postedfrom = $_POST['from'];
$postedrures = $_POST['rures'];
$postedemail = $_POST['email'];
$postedblockname = $_POST['blockname'];
$postedfloorno = $_POST['floorno'];
$posteddoorno = $_POST['doorno'];
$postedcontent = $_POST['content'];
$stmt = $mysqli->prepare("INSERT INTO `advertisements` (`from`, `r_u_res`, `email`, `blockname`, `floorno`, `doorno`, `content`) VALUES (?, ?, ?, ?, ?,?,?)");
$stmt->bind_param('sssssss', $postedfrom, $postedrures, $postedemail, $postedblockname, $postedfloorno, $posteddoorno, $postedcontent);
$stmt->execute();
$stmt->close();
[我看到了一个帖子OO mysqli prepared statements help please,答案似乎确实与上面的代码类似,但是我想知道是否像第一个代码那样做会带来安全问题...
从安全的角度来看,这两种形式都是等效的,因为php首先解析要在方法调用中传递给$stmt->bind_param
的值,因此该函数在两种情况下都看到完全相同的值。
ps:两个摘要对我来说都不错。