通过PDO和自动功能更新

时间:2013-11-06 11:15:04

标签: php pdo

由于自动快速更新,我正在准备自己的功能。

我有那段代码:

$allowededitablefields = array('mail');
$userid = $_GET['uid'];
$query = 'UPDATE users SET ';
foreach ($_POST as $key => $value) {
    if(!in_array($key,$allowededitablefields)) {
    unset($_POST[$key]);
    }
else {
        $query .= $key.' = :'.$key.',';
   }
}
$query = substr($query, 0, -1);
$query .= ' WHERE id='.$userid;
$statement = $this->_db->prepare($query);
foreach ($_POST as $key => $value) {
    $statement->bindParam(':'.$key,$value);
}
$statement->execute();

如果在$ allowededablefields数组中,我只有一个值,它可以正常工作,但如果我将一些值推送到数组,例如$ allowededablefields = array('mail','country',...);表中的字段采用相同的值。

1 个答案:

答案 0 :(得分:1)

$value保存foreach循环结束时的最后一次迭代的值。

将bindParam更改为此。

$statement->bindParam(':'.$key,$_POST[$key]);

这应该有效,但你的方法存在根本缺陷。它破坏了预备陈述的整个目的。