如果我在bindParam(mysqli)中直接使用$ _POST值会出现安全问题吗?

时间:2013-07-08 12:55:43

标签: post mysqli bind

我一直在阅读有关使用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 mysqli prepared statements help please,答案看起来像上面的代码,但我想知道是否像第一个代码一样构成安全问题......

1 个答案:

答案 0 :(得分:0)

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

ps:这两个片段看起来都不错。