Php pdo mysql insert将相同的内容放在多个字段中

Php pdo mysql insert将相同的内容放在多个字段中,php,pdo,Php,Pdo,好吧,出于某种原因,这个查询: $db->sqlquery("INSERT INTO `password_reset` SET `user_email` = ?, `secret_code` = ?, `expires` = ?", array($email, $random_string, $next_week)); 在每个字段中输入“random_string”,我不知道为什么 这是我的查询代码: public function sqlquery($sql, $objects

好吧,出于某种原因,这个查询:

$db->sqlquery("INSERT INTO `password_reset` SET `user_email` = ?, `secret_code` = ?, `expires` = ?", array($email, $random_string, $next_week));
在每个字段中输入“random_string”,我不知道为什么

这是我的查询代码:

    public function sqlquery($sql, $objects = array())
{
    global $core;
    try
    {
        $this->STH = $this->database->prepare($sql);

        foreach($objects as $k=>$p)
        {
            // +1 is needed as arrays start at 0 where as ? placeholders start at 1 in PDO
            if(is_numeric($p))
            {
                $this->STH->bindParam($k+1, $p, PDO::PARAM_INT);
            }
            else
            {
                $this->STH->bindParam($k+1, $p, PDO::PARAM_STR);
            }
        }


        return $this->STH->execute();

        $this->counter++;
    }

    catch (PDOException $e)
    {
        $core->message($e->getMessage());
    }
}

知道为什么会这样做吗?

PDO参数由引用绑定。因此,所有参数都被绑定为对同一
$p
变量的引用,执行查询时该变量的值是数组的最后一个元素

尽管您说过所有字段中插入的值都是数组的第二个元素。我不知道这是为什么


解决方案是使用
bindValue
而不是
bindParam

在每次迭代中回显
$p
的值怎么样?我试过了,$p是正确的。$p是参数,如果对象数组和$p是要放入数据库的内容,它会循环每个参数。我想你可能是对的,我还没有测试过,但我不知道在哪里可以使用不同的方法。刚刚测试过,你是100%正确的,非常感谢,我甚至没有想到这一点,因为每次都是$p,它不是像bindValue那样在那里做的,而是像Param那样存储然后再做的。我认为另一个选项是在foreach中使用
$k=>&$p
,因此
$p
将是对数组元素的引用。