-1

我一直在阅读有关在 isert 语句中直接使用 $_POST 值的信息,并了解这是自找麻烦。在我阅读的任何帖子中都不清楚的是 - 假设我的表单正在向我的 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 mysqliprepared statements help please where 答案似乎和上面的代码一样,但我想知道像第一个代码那样做是否会带来安全问题......

4

1 回答 1

0

从安全角度来看,这两种形式是等效的,因为 php 首先解析要在方法调用中传递的值$stmt->bind_param,因此该函数在两种情况下看到完全相同的值。

ps:两个片段对我来说都不错。

于 2013-07-08T12:58:30.393 回答