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変数への参照としてバインドされており、クエリ実行時の値は配列の最後の要素です。

すべてのフィールドに挿入される値は、配列の2番目の要素であるとおっしゃいましたが。理由はわかりません。

bindValue解決策は、の代わりにを使用することですbindParam

于 2012-10-12T17:58:52.090 に答える