-1

データベースにクエリを実行する関数があります。

public function query($sql, $params = array()) {
    // reset error back to false
    $this->_error = false;

    // check query to prepare
    if($this->_query = $this->_pdo->prepare($sql)) {
        $x = 1;
        if(count($params)) {
            foreach($params as $param) {
                $this->_query->bindValue($x, $param);
                $x++;
            }
            print_r($this->_pdo->errorInfo());
        }
        // check query execution
        if ($this->_query->execute()) {
            $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ);
            $this->_count = $this->_query->rowCount();
        } else {
            // error
            $this->_error = true;
        }
    }

    return $this;
}

しかし、うまくいかないことがあります。ライン$this->_query->bindValue($x, $param);は本来すべきことをしていません。拘束力はありません。関数にパラメーターがスローされた配列は問題ないようです。$sqlステートメントも問題なく、次のように返されます。

INSERT INTO responders (`username`, `password`, `salt`) VALUES (?, ?, ?)

これは bind メソッドを使用するのに最適なはずです。しかし、 foreach ループを通過した後、何も変更されておらず、 _query var は同じままです。したがって、DB へのエントリはまったく作成されません。また、エラー情報を使用するためにツリーを作成し、戻ってきました。

Array ( [0] => 00000 [1] => [2] => ) 

ここで何が欠けているのか、誰かが私に手がかりを与えることができますか?

4

1 に答える 1

-2

面倒なコードをすべて読まなくても、この関数がどうあるべきかは次のとおりです

public function query($sql, $params = array()) {
    $query = $this->_pdo->prepare($sql);
    $query->execute($params);
    return $query;
}

PDOを例外モードに設定することを忘れないでください

于 2014-04-26T19:16:47.020 に答える