MySQLi: declaração preparada para retornar matrizes aninhadas

Eu uso este método de class para retornar uma matriz anidada / multidimensional,

public function fetch_all_stmt($sql,$types = null,$params = null) { # create a prepared statement $stmt = parent::prepare($sql); if($stmt) { if($types&&$params) { $bind_names[] = $types; for ($i=0; $iexecute(); # these lines of code below return multi-dimentional/ nested array, similar to mysqli::fetch_all() $stmt->store_result(); $variables = array(); $data = array(); $meta = $stmt->result_metadata(); while($field = $meta->fetch_field()) $variables[] = &$data[$field->name]; // pass by reference call_user_func_array(array($stmt, 'bind_result'), $variables); $i=0; while($stmt->fetch()) { $array[$i] = array(); foreach($data as $k=>$v) $array[$i][$k] = $v; $i++; } return $array; # close statement $stmt->close(); } else { return self::get_error(); } } 

É assim que eu chamo esse método,

 $sql = " SELECT * FROM root_contacts_cfm WHERE root_contacts_cfm.cnt_suspended = ? ORDER BY cnt_id DESC "; print_r($mysqli->fetch_all_stmt($sql,'s',array('0'))); 

ele retorna corretamente,

 Array ( [0] => Array ( [cnt_id] => 1 [cnt_email1] => lau@xx.uk [cnt_email2] => [cnt_fullname] => Lau T [cnt_firstname] => TK [cnt_lastname] => Lau [cnt_suspended] => 0 [cnt_created] => 2011-02-04 00:00:00 [cnt_updated] => 2011-02-04 13:53:49 ) [1] => Array ( [cnt_id] => 2 [cnt_email1] => lauxx@xx.uk [cnt_email2] => [cnt_fullname] => Lau Txx [cnt_firstname] => T [cnt_lastname] => Lau [cnt_suspended] => 0 [cnt_created] => 2011-02-04 00:00:00 [cnt_updated] => 2011-02-04 13:53:49 ) ) 

Mas ele retorna uma mensagem de erro quando eu loop,

 $sql = " SELECT * FROM root_contacts_cfm WHERE root_contacts_cfm.cnt_id = ? "; for ( $i = 1; $i fetch_all_stmt($sql,'s',array($i))); } 

Aviso: variável não definida: array em C: \ wamp \ www \ 000_TEST \ php \ php_export_excel \ class_database.php na linha 377

a linha 377 refere-se a return $array; depois de,

 $i=0; while($stmt->fetch()) { $array[$i] = array(); foreach($data as $k=>$v) $array[$i][$k] = $v; $i++; } return $array; 

Nenhum erro ocorre se eu mover return $array; dentro de while{} mas a primeira instância então não retornará uma lista de matriz aninhada (que é duas matrizes aninhadas), apenas uma matriz aninhada.

Por quê? Como posso corrigi-lo?

Obrigado.