2011-03-17 133 views
0

我想在PHP中創建一個方法,它將動態綁定參數到PDO查詢語句。不幸的是,在我的代碼下面,我只能綁定1個參數,因爲添加更多參數將覆蓋以前的參數。不過,有沒有解決這個問題的好方法?PDO綁定參數與參數

我希望有人能幫忙。謝謝!

function executeQuery($query, $critArr = null) { 
    $rows = array(); 
     try { 
      $stmt=$this->pdo->prepare($query); 
      if (!empty($critArr)) { 
       foreach($critArr as $cKey=>$cValue) { 
        $stmt->bindParam($cKey, $cValue); //!! 
       } 
      } 
      $stmt->execute(); 

回答

0

你不需要那樣做。該execute方法已經花費的參數的陣列:

function executeQuery($query, $critArr = null) { 
    $rows = array(); 
     try { 
      $stmt=$this->pdo->prepare($query); 
      $stmt->execute($critArr); 
      // ... 

原來的問題是,bindParam作品通過引用,並foreach簡單地一遍又一遍地重複使用相同的變量,而不是在循環的底部消滅它們和(重新)在頂部創建它們。你一遍又一遍地重新綁定相同的變量。 (順便說一句,這是該mysqli延伸部具有同樣的問題,而它也缺乏便利已經通吃一個陣列execute方法。)

0

你的功能與由參考& $ cValue傳遞的foreach $ cValue改善。這應該可以解決你的問題。

function executeQuery($query, $critArr = null) { 

    $rows = array(); 
     try { 
      $stmt=$this->pdo->prepare($query); 
      if (!empty($critArr)) { 
       foreach($critArr as $cKey=>&$cValue) { 
        $stmt->bindParam($cKey, $cValue); //!! 
       } 
      } 
      $stmt->execute();