Подготовленные запросы в mysqli

BelStudent

целеустремлённый чел
Подготовленные запросы в mysqli

Столкнулся с проблемой, что и в 2 комменте на http://ru.php.net/manual/en/mysqli-stmt.fetch.php , а точнее:
I tried the mentioned stmt_bind_assoc() function, but somehow, very strangely it doesn't allow the values to be written in an array! In the while loop, the row is fetched correctly, but if I write $array[] = $row;, the array will be filled up with the last element of the dataset... Unfortunately I couldn't find a solution.
Потом ещё пытался въехать в код (3-ий коммент от начала):
Код:
 function stmt_bind_assoc (&$stmt, &$out) {
    $data = mysqli_stmt_result_metadata($stmt);
    $fields = array();
    $out = array();

    $fields[0] = $stmt;
    $count = 1;

    while($field = mysqli_fetch_field($data)) {
        $fields[$count] = &$out[$field->name];
        $count++;
    }    
    call_user_func_array(mysqli_stmt_bind_result, $fields);
}
А точнее вот эти 2 строки:
Код:
$fields[$count] = &$out[$field->name];
...
сall_user_func_array(mysqli_stmt_bind_result, $fields);
Суть первой, что мы создаём массив с ключом $field->name и сохраняем ссылку на этот элемент в $fields.
2-ая строка биндует результат с ссылками, по сути (ИМХО), это тоже самое что биндовать данные снапрямую с элементами массива.
Но получается (как написано в первой english цитате) при
Код:
while ($stmt->fetch()) {
    $array[] = $row;
}
...получается целый массив ссылающийся на одну и ту же одну запись. Я уже мозг словал но всё равно считаю, что должен быть массив различных элементов, а на самом деле оно не так.
Может кто объяснит мне, реально что-то не понимаю.
 

BelStudent

целеустремлённый чел
zerkms
Фишка в том, что в out данных нет. Когда мы делаем $out[$field->name] мы по сути регестрируем элемент массива с ключом $field->name и дефолтным значением (null). там этот массив нужен для биндинга данных. Т.е. по ссылке в этот массив заносятся данные в mysqli_stmt_bind_result.
 
Сверху