2013-10-16 147 views
0

我已經寫了一個函數,應該用數組中的值替換?的值,但是我無法讓它正常工作。PDO bindParam錯誤

public function exec($sql, Array $params = array()) { 
      if($query = $this->db->prepare($sql)) { 
        $x = 1; 
        if(count($params)) { 
          foreach($params as $param) { 
            $query->bindParam($x, $param); 
            $x++; 
          } 
        } 
      } 
      $query->execute(); 
      print_r($query); 

查詢:

$mysql->exec("SELECT * FROM test where id = ?", array(0)); 

輸出:

PDOStatement Object ([queryString] => SELECT * FROM test where id = ?) 
+0

你什麼錯誤? – Vallentin

+0

沒有錯誤,但?沒有被取代。 – ethan476

+1

'print_r($ query);'不會工作,因爲綁定查詢不存在於php中,因爲查詢/參數被單獨發送到mysql。見http://stackoverflow.com/questions/210564或http://stackoverflow.com/questions/1786322或http://stackoverflow.com/questions/11122573或http://stackoverflow.com/questions/530627-it/530705#530705。你可以使用['print_r($ query-> debugDumpParams());'](http://php.net/manual/en/pdostatement.debugdumpparams.php) – Sean

回答

1

一切工作正常,原因仍看到?同時呼籲print_r($query);是因爲價值觀實際上從未被放入查詢本身。

準備報表的方式工作,是當您撥打prepare()然後查詢被髮送到數據庫。然後,當您稍後調用​​時,所有值將被髮送到數據庫,並且將完成剩餘的工作。

基本上,你是查詢和價值永遠不會連接或放在一起,這也是爲什麼你不必逃避的價值觀。

-1

嘗試

$result = $query->fetchAll(); 
print_r($result); 

,而不是

print_r($query); 
+0

再次嘗試閱讀OP的問題,因爲這與他的實際問題無關。 – Vallentin

+0

嗯..看起來像我錯過了這一點。 – Pramod