Отображение результатов запроса к базе данных в двух столбцах

#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