Странное поведение массива PHP перезаписывает значения одинаковыми значениями - PullRequest
0 голосов
/ 16 апреля 2010

Я делаю простой запрос mysqli с кодом, который я уже много раз использовал, но со мной никогда не возникало этой проблемы. Я собираю всю таблицу с неизвестным количеством столбцов (это часто меняется, поэтому я не знаю ни точное значение, ни имена столбцов). У меня есть код, который использует метаданные, чтобы захватить все и вставить его в массив.

Это все работает нормально, но вывод испорчен:

$stmt -> execute();  //the query is legit, no problems there
$meta = $stmt->result_metadata();
while ($field = $meta->fetch_field())
{
    $params[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $params);

while ($stmt->fetch())
{
    $pvalues[++$i] = $row; //$pvalues is an array of arrays. row is an array
    //print_r($row);
    print_r($pvalues[$i-1]);
}
$stmt -> close();

Я бы предположил, что $ pvalues ​​имеет результаты, которые я ищу. Моя таблица в настоящее время имеет 2 строки. $ pvalues ​​имеет длину массива 2. Обе строки в $ pvalues ​​абсолютно одинаковы. Если я использую:

print_r($row)

выводит правильные значения для обеих строк, но если позже я проверю, что находится в $ pvalues, это неверно (1 строка присваивается обоим индексам $ pvalues).

Если я использую

print_r($pvalues[$i-1])

он печатает точно так, как я ожидал, одну и ту же строку в таблице дважды.

Почему данные не присваиваются $ pvalues? Я знаю, что $ row содержит правильную информацию в одном месте, но она перезаписывается или теряется.

1 Ответ

0 голосов
/ 16 апреля 2010

Не должно ли быть

while ($row = $stmt->fetch())

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...