#php #mysqli
#php #mysqli
Вопрос:
Я пытаюсь отобразить результаты из базы данных в двух столбцах, но, похоже, я не могу заставить это работать. Я видел несколько примеров здесь, но они очень старые и на самом деле не следуют тому, что я делаю. Ниже приведены две ошибки, которые я получаю.Все, что он выводит, это слово «Массив»
Примечание: неопределенное смещение: 99 в G:xampphtdocscarDirectorylisting.php в строке 19
Обратите внимание: преобразование массива в строку в G:xampphtdocscarDirectorylisting.php в строке 23
<?php
include_once 'includes/dbh.inc.php';
include 'functions.php';
$sql = "SELECT * FROM roads ORDER BY roadName ASC";
$stmt = $mysqli->prepare($sql);
$stmt ->execute();
//stmt ->store_result();
//$stmt ->bind_result($roadID, $roadName, $reportingMark);
$result = $stmt->get_result();
//$mid = $result->num_rows;
$mid = ceil($result->num_rows/2);
while ($row = $result->fetch_row()) {;
$listing[] = $row;
}
for($i=0; $i<$mid; $i ){
$colOne = $listing[$i];
$colTwo = $listing[$i $mid];//line 19
}
echo "<table>";
echo "<td>";
echo $colOne;//line 23
echo "</td>";
echo "<td>";
echo $colTwo;
echo "</td>";
echo "</table>";
//echo $data;*/
//printf("%s (%s)n",$roadID, $roadName, $reportingMark);
$stmt->close();
$mysqli->close();
Комментарии:
1. Какова цель? Почему бы не сделать все в
while
цикле?2. Цель состоит в том, чтобы иметь столбцы данных из базы данных. В примере, который я использовал, цикл while заканчивался до начала цикла for.
Ответ №1:
Вам нужно выводить строки таблицы по мере перебора данных. Обратите внимание, что поскольку каждая строка является массивом, вам нужно, чтобы implode
строка выводила ее в виде строки. В приведенном ниже коде я предположил, что вам нужны отдельные столбцы для каждого значения в строке. Вы можете использовать fetch_all
, чтобы избежать повторения цикла fetch_row
. Также вам необходимо принять во внимание тот факт, что у вас может быть нечетное количество строк; в этом случае вам необходимо указать данные по умолчанию для второго столбца в последней строке. Я сделал это, используя array_fill
для создания массива пустых данных. Объединив все это, замените код after $result = $stmt->get_result();
следующим образом:
$listing = $result->fetch_all();
$mid = ceil(count($listing) / 2);
echo "<table>n";
for ($i = 0; $i < $mid; $i ) {
echo '<tr>';
echo '<td>' . implode('</td><td>', $listing[$i]) . '</td>';
echo '<td>' . implode('</td><td>', $listing[$i $mid] ?? array_fill(0, count($listing[0]), '')) . '</td>';
echo "</tr>n";
}
echo "</table>n";
$stmt->close();
$mysqli->close();
Демонстрация (со случайной выборкой данных) на 3v4l.org