2017-03-17 48 views
0

我傳遞值的數組海槽bind_param功能,這樣我這樣做是這樣的:傳球達陣槽bind_param

<?php 
class Query{ 
    private $_mysqli; 

    /* 
    * @param object $mysqli 
    */ 
    public function __construct($mysqli) 
    { 
     $this->_mysqli = $mysqli; 
    } 

    /* 
    * @param string query 
    * @param string $types 
    * @param array $values 
    */ 
    public function read($query = "", $type = "", $params = array()) 
    { 
     $query = ($query === "") ? die("Read error: Query") : $query; 
     $type = ($type === "") ? die("Read error: Type") : array($type); 
     $params = (count($params) == 0) ? die("Read error: Params") : $params; 

     $values = array(); 
     foreach($params as $key => $value) { 
      $values[$key] = &$params[$key]; 
     } 

     if ($stmt = $this->_mysqli->prepare($query)) 
     { 
      call_user_func_array(array($stmt, "bind_param"), array_merge($type, $values)); 
      $stmt->execute(); 
      $fields = array(); 
      for($i=0; $i<count($params); $i++){ 
       $fields[$i] = $params[$i]; 
      } 
      call_user_func_array(array($stmt, "bind_result"), $fields); 

      $array = array(); 
      while($data = $stmt->fetch()) 
      { 
       $array[] = $data; 
      } 

      return $array; 
     } 
    } 
} 

這是我用我的方式功能

<?php 
//$mysqli is the mysqli connection 
$query = new Query($mysqli); 

$query_str = "SELECT * FROM users WHERE voornaam = ? AND achternaam = ?"; 
$types = "ss"; 
$params = array("Mathieu", "Posthumus"); 
var_dump($query->read($query_str, $types, $params)); 
?> 

從哪裏獲得stucked的部分是:

<?php 
$fields = array(); 
for($i=0; $i<count($params); $i++){ 
    $fields[$i] = $params[$i]; 
} 
call_user_func_array(array($stmt, "bind_result"), $fields); 

$array = array(); 
while($data = $stmt->fetch()) 
{ 
    $array[] = $data; 
} 
?> 

林不知道哪裏出了問題,我有一種感覺,在得到控制而e循環。 希望你們能幫助我使這個功能工作:)

回答

1

你結合的結果,所以你並不需要你獲取數據分配給新的變量,

mysqli_stmt :: bind_result - mysqli_stmt_bind_result -

,而你正在使用call_user_func_array,並根據該comment綁定變量 到準備好的語句結果存儲,你的循環:

while($data = $stmt->fetch()) 
{ 
    $array[] = $data; 
} 

可以如下:

while($stmt->fetch()) 
{ 
    // params which you had bind it into bindParams 
    $array[] = $params; 
}