0

PDO を使用してデータベースに接続する単純なクラスを作成するのに少し問題があります。
問題は、サイクルの最初の呼び出しの後に PDOStatement::bindParam が機能しないことです。つまり、PDOStatement に与えるパラメーターが 2 つある場合、パラメーターを 1 つだけ与えると、クエリは正しい結果を返しません。それは正しい結果をもたらします。

コードは次のとおりです。

public function query($sql, $params = NULL) {
        // Opens the PDO connection
        $this->open();

        $this->stmt = $this->pdo->prepare($sql);

        if (isset($params)) {
            foreach ($params as $key => $value) {
                // This doesn't work after the second cicle.
                $this->stmt->bindParam(':' . $key, $value);
            }
        }

        $result = NULL;
        if (!$this->stmt->execute()) {
            $result = false;
        } else {
            $result = $this->stmt->fetchAll();
        }

        // Closes the PDO connection
        $this->close();

        return $result;
}

PDOStatement::debugDumpParams は次のとおりです。

SQL: [114]
SELECT 1
FROM   users
WHERE  EXISTS
       (
              SELECT *
              FROM   users
              WHERE  username = :username
              AND    password = :password) limit 1
PARAMS: 2
KEY:NAME: [9] :username paramno=0 NAME=[9] ":username" is_param=1 param_type=2
KEY:NAME: [9] :password paramno=1 NAME=[9] ":password" is_param=1 param_type=2  

助けてくれてありがとう!

4

1 に答える 1