Мой код PHP PDO fetchAll() возвращает одну строку вместо всех результатов в таблице столбцов MySql
Я пытаюсь заполнить все результаты из одного столбца таблицы MySql через PHP и PDO FetchAll() с помощью подготовленных операторов, но мой код просто возвращает одну строку вместо всех результатов. Я видел этот вопрос здесь ( PHP PDO, возвращающий одну строку), который похож на мою проблему, но мне не удалось улучшить мой код с этим вопросом.
Я следовал примеру на странице руководства PHP ( http://php.net/manual/en/pdostatement.fetchall.php), чтобы попытаться структурировать / адаптировать мой код для получения результатов fetchAll() одного столбца в таблице MySql:
Страница руководства PHP - пример FetchAll с печатью:
<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
print_r($result);
?>
И я адаптировал свой код на основе приведенного выше примера, используя HTML-тег select:
<select name="category" class="form-control" required>
<option value="0" selected="selected" disabled="disabled" style="display: none">Select one category</option>
<?php
require_once 'pdo_connection.php';
$sth = $dbh-> prepare( 'SELECT * FROM categories' );
$sth-> execute();
$result = $sth-> fetchAll(); ?>
<?php foreach( $result as $row ) ?>
<option value="<?php echo $row['category_id'];?>"><?php echo $row['category'];?></option>
</select>
И это мое соединение с базой данных PDO:
<?php
$dbh = new PDO('mysql:host=localhost;dbname=system_vip;charset=utf8', 'root', '');
?>
Что я могу сделать, чтобы улучшить мой код, чтобы заполнить все результаты из одного столбца таблицы MySql, используя подготовленные операторы и соединение PDO?
1 ответ
fetchAll()
Это хорошо. если ты var_dump($result)
вы увидите, что все строки там.
Это проблема:
<?php foreach( $result as $row ) ?>
<option value="<?php echo $row['category_id'];?>"><?php echo $row['category'];?>
Без использования фигурных скобок или альтернативного синтаксиса для группировки операторов после foreach будет повторяться только первое утверждение после foreach. В этом случае первое утверждение после foreach - ничто. Закрывающий тег PHP подразумевает разделитель инструкций, так что вы фактически говорите:
foreach( $result as $row );
т.е. для каждого ряда ничего не делать. $row
после цикла по-прежнему определяется как последняя строка массива, которая является единственной опцией, с которой вы в конечном итоге столкнулись.
Вот пример альтернативного синтаксиса для включения двух операторов:
<?php foreach( $result as $row ): ?>
<option value="<?php echo $row['category_id'];?>"><?php echo $row['category'];?></option>
<?php endforeach; ?>