2

好的,由于某种原因,这个查询:

$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());
    }
}

知道为什么会这样做吗?

4

1 回答 1

2

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

尽管您说插入到所有字段中的值是数组的第二个元素。我不确定为什么会这样。

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

于 2012-10-12T17:58:52.090 回答