2013-10-16 151 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