Вы используете оператор объединения массивов. From PHP docs:
Оператор + возвращает правый массив, добавленный к левому массиву; для ключей, которые существуют в обоих массивах, будут использоваться элементы из левого массива, а соответствующие элементы из правого массива будут игнорироваться.
Ваш временный массив имеет тот же ключ как массив, в который вы собираете. Оба имеют элементы с ключом 0, поэтому новая строка не добавляется.
Чтобы исправить это, вы должны использовать массив pu sh, т. Е. []
.
while($stmt->fetch())
{
print_r($description." ".$amount); //This prints all the entries for the given query
$row['desc'] = $description;
$row['amount'] = $amount;
$order_details[] = $row; // Append the new row into the array
}
Однако я не рекомендую такой ручной подход. У mysqli есть методы для извлечения всех строк одновременно. Вместо этого следует использовать fetch_all()
.
// order_details_table
$invoice = 1234;
$stmt = $con->prepare("SELECT `description`,`amount` FROM order_details_table WHERE invoice_no = ?");
$stmt->bind_param("s", $invoice);
$stmt->execute();
$result = $stmt->get_result(); // Get the result instead of binding
$order_details = $result->fetch_all(MYSQLI_ASSOC);
Если вы действительно хотите l oop по результатам один за другим и создать массив вручную, тогда используйте foreach
l oop для объекта mysqli_result .
// order_details_table
$invoice = 1234;
$stmt = $con->prepare("SELECT `description`,`amount` FROM order_details_table WHERE invoice_no = ?");
$stmt->bind_param("s", $invoice);
$stmt->execute();
$result = $stmt->get_result(); // Get the result instead of binding
$order_details = []; // Instanciate empty array
foreach($result as $row)
{
$newrow['desc'] = $row['description'];
$newrow['amnt'] = $row['amount'];
$order_details[] = $newrow; //This appends just the first entry
}
print_r($order_details);