0

Laravel のようなクエリ ビルダーを構築しようとしましたが、問題が発生しました。

致命的なエラー: 31 行目の C:\xampp\htdocs\tutorial\public\classes\DB.php の非オブジェクトでメンバー関数 fetch() を呼び出します

class DB {
    private $_pdo,
    $_query,
    $_results = array(),
    $_count = 0;

    public static $instance;

    public static function getInstance(){
        if(!isset(self::$instance)){
            self::$instance = new DB();
        }
        return self::$instance;
    }

    public function __construct(){
        try {
            $this->_pdo = new PDO('mysql:host=localhost;dbname=query', 'root', '');

            $this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) {
            echo 'ERROR: ' . $e->getMessage();
        }
    }

    public function query($sql){
        if($this->_pdo = $this->_pdo->query($sql)){

           while($row = $this->_query->fetch(PDO::FETCH_OBJ)){
               $this->_results[] = $row;

           }
        }
        return $this;
 }

 public function results(){

     return $this->_results;
 }

}

4

2 に答える 2

3

変化する:

if($this->_pdo = $this->_pdo->query($sql)){

に:

if($this->_query = $this->_pdo->query($sql)){

編集:

あなた$_queryが呼び出された場合、この状況ではさらに良いでしょう$_resource

編集2:

query将来的には、メソッドで実際にクエリを実行する SQL の種類を確認する必要がありUPDATE...ます。オブジェクトのどこかで返される / 設定され、返さaffected rowsれるINSERT.../設定されるとよいでしょうlast insert idか。

これにより、はるかに柔軟になります-ただし、単なる提案です:)

編集3:

$sql が安全である/インジェクションプルーフであることを確認してください - PDO の場合は、準備済みステートメントを使用します。

PDO::prepare - マニュアル

于 2013-08-27T15:08:07.260 に答える
0

$this->_queryクエリ関数で設定されることはありません。$this->_pdoクエリ変数ではなく、クエリの結果に代入しています。

于 2013-08-27T15:10:52.053 に答える