2011-02-27 97 views
0

我一直試圖讓這個工作在大部分時間都無濟於事。綁定參數錯誤(PHP)

基本上,我想bind_param()的一個foreach()循環中,但是,當我這樣做,我得到以下錯誤:

Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters in prepared statement in /nfs/domains/domain.com/html/v2/includes/classes/class.Database.php on line 72 

Warning: mysqli_stmt::bind_param() [mysqli-stmt.bind-param]: Number of variables doesn't match number of parameters in prepared statement in /nfs/domains/domain.com/html/v2/includes/classes/class.Database.php on line 72 

我假設這是由於PHP認爲由於循環內部有單個bind_param()語句,只有一個參數被綁定,因此它與prepare語句中指定的參數數量不匹配。

如果這是正確的,我該如何糾正?

代碼提取物(管線19):

public function query($sql, $params) { 

    if(!$sobj = $this->conn->prepare($sql)) { 

     die('Query Prepare Error (' . $this->conn->mysqli_errno . ') ' 
      . $this->conn->mysqli_error); 

    } else { 

     if(!is_array($params)) { 

      $params = array_slice(func_get_args(), 1); 

     } 

     foreach($params as $value) { 

      $type = strtolower(gettype($value)); 
      $sobj->bind_param($type[0], $value); 

     }      

     $sobj->execute(); 
     $sobj->bind_result($result); 
     $sobj->fetch(); 

     $sobj->close(); 

     return $result; 

    } 

} 

感謝。

+0

請粘貼查詢,發現錯誤。沒有它就很難進行調試。 – 2011-02-27 04:07:49

回答

2

mysqli_stmt::bind_param期望您在一次調用中綁定所有必要的參數,而不是在多次連續調用中。這將需要更多這樣的:

$types = ''; 
foreach($params as $value) { 
    $types.= substr(strtolower(gettype($value)), 0, 1); 
} 
call_user_func_array(array($sobj, 'bind_param'), array_merge(array($types), $params))); 

不要看警告有關call_user_func_arrayhere雖然。

+0

感謝您的幫助。 – Rubarb 2011-03-04 21:39:41