2014-02-15 81 views
0

我有,在db.php中的文件,下面的代碼:

public function query($sql, $params = array()){ 
    $this->_error = false; 
    if($this->_query = $this->_pdo->prepare($sql)){ 
     $x = 1; 
     if(count($params)){ 
      foreach($params AS $pa){ 
       $this->_query->bindValue($x, $pa); 
       $x++; 
      } 
     } 
     #MASSIVE ERROR 
     #correctthis 
     if($this->_query->execute()){ 
      echo 'success'; 
      $this->_result = $this->_query->fetchAll(PDO::FETCH_OBJ); 
      $this->_query = $this->_query->rowCount(); 
     } else { 
      $this->_error = true; 
     } 
    } 

    return $this; 
} 

public function error(){ 
    return $this->_error; 
} 

我的問題是$this->_query->execute()始終是假的,這意味着$ _error總是被設置爲true。即使它看起來沒有任何問題,我也無法使它工作。

腳本進入準備(我通過回聲測試),這意味着它準備成功。它也進入foreach循環,所以值必須被綁定。但它似乎無法執行。爲什麼?

編輯:

我用DB::getInstance()->query("SELECT email FROM user_credentials WHERE user_id = ?", array(1))打電話查詢,這是什麼的getInstance樣子:

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

你的** $ sql **語句是怎麼樣的?它是否期望你在執行中不提供參數? – sqlab

+0

我正在使用'DB :: getInstance() - >查詢(「SELECT email FROM user_credentials WHERE user_id =?」,array(1));'我正在編輯我的帖子以顯示getInstance的樣子。 – markovchain

+0

對於問號你不需要綁定參數,但是無論哪種方式,你都應該在執行調用中提供參數。 – sqlab

回答

-1

讓你的函數這樣

public function queryAll($sql, $params = array(), $method = PDO::FETCH_OBJ) 
{ 
    $stmt = $this->_pdo->prepare($sql); 
    $stmt->execute($params); 
    return $stmt->fetchAll($method); 
} 

,或者,如果你喜歡的方法鏈接,那麼這樣

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

然後在異常模式設置PDO,你將永遠通知發生任何錯誤。爲了使這樣的構造

$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

添加該代碼的代碼的其餘部分是沒用的,不靈活,容易出錯,有時甚至完全錯誤的。

+0

謝謝!但是當'$ params'沒有元素時,你的代碼會發生什麼?另外,爲什麼你建議使用'$ stmt'而不是'$ this - > _ query'? – markovchain

+0

我不知道誰低估了你,但這個答案是有幫助的。我只是剛剛開始使用PDO,這段代碼來自一個教程,讓你逐步瞭解數據發生了什麼。 – markovchain

+1

@markovchain只是試試看。沒有什麼特別的 - 查詢只是照常執行。 –

-1

試試這個知道該查詢返回的具體錯誤。我只修改了其他塊。

#MASSIVE ERROR 
    #correctthis 
    if($this->_query->execute()){ 
     echo 'success'; 
     $this->_result = $this->_query->fetchAll(PDO::FETCH_OBJ); 
     $this->_query = $this->_query->rowCount(); 
    } else { 
     $this->_error = true; 
     echo $this->_query->errorInfo()[2]; 
    } 
0

我認爲你沒有正確連接數據庫。查看連接功能是否正常工作。像下面的代碼,如果你是從在線教程試試這個:

$this->_pdo = new PDO('mysql:host=' . Config::get 
('mysql/host') . ';dbname=' . Config::get('mysql/db'), 
Config::get('mysql/username'), Config::get('mysql/password')); 
相關問題