Я использую этот метод класса для возврата вложенного / многомерного массива,
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; $i<count($params);$i++)
{
$bind_name = 'bind' . $i;
$$bind_name = $params[$i];
$bind_names[] = &$$bind_name;
}
$return = call_user_func_array(array($stmt,'bind_param'),$bind_names);
}
# execute query
$stmt->execute();
# 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();
}
}
Так я называю этот метод,
$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')));
, он возвращает правильно,
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
)
)
Но при цикле возвращается сообщение об ошибке,
$sql = "
SELECT *
FROM root_contacts_cfm
WHERE root_contacts_cfm.cnt_id = ?
";
for ( $i = 1; $i <= 3; ++$i )
{
print_r($mysqli->fetch_all_stmt($sql,'s',array($i)));
}
Примечание: неопределенная переменная: массив в C: \ wamp \ www \ 000_TEST \ php \ php_export_excel \class_database.php в строке 377
строка 377 ссылается на return $array;
после,
$i=0;
while($stmt->fetch())
{
$array[$i] = array();
foreach($data as $k=>$v)
$array[$i][$k] = $v;
$i++;
}
return $array;
При перемещении return $array;
внутрь while{}
не возникает ошибка, но первый экземпляртогда не вернет список вложенных массивов (то есть двух вложенных массивов), только один вложенный массив.
Почему?Как я могу это исправить?
Спасибо.