我的 PHP PDO fetchAll() 代码 returns 一行而不是 MySql 列 table 上的所有结果
My PHP PDO fetchAll() code returns one row instead of all results on MySql column table
我正在尝试通过 PHP 和 PDO FetchAll() 填充 MySql table 一列的所有结果,但我的代码只是 return一行而不是所有结果。我在这里看到了这个问题 (PHP PDO returning single row),它与我的问题类似,但我没有通过这个问题改进我的代码。
我按照 PHP 手册页 (http://php.net/manual/en/pdostatement.fetchall.php) 中的示例尝试 structure/adapt 我的代码以获取 MySql 中一列的 fetchAll() 结果 table:
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', '');
?>
我可以做些什么来改进我的代码,以使用准备好的语句和 PDO 连接从 MySql table 上的一列中填充所有结果?
fetchAll()
没问题。如果你 var_dump($result)
你会看到所有的行都在那里。
这是问题所在:
<?php foreach( $result as $row ) ?>
<option value="<?php echo $row['category_id'];?>"><?php echo $row['category'];?>
如果不使用大括号或替代语法对foreach 之后的语句进行分组,则只会重复foreach 之后的第一条语句。在这种情况下,foreach 之后的第一条语句什么也不是。结束的 PHP 标签暗示了一个 instruction separator,所以你实际上是在说:
foreach( $result as $row );
即对于每一行,什么都不做。 $row
仍然在循环后定义为数组的最后一行,这是您最终得到的一个选项。
下面是包含两个语句的替代语法示例:
<?php foreach( $result as $row ): ?>
<option value="<?php echo $row['category_id'];?>"><?php echo $row['category'];?></option>
<?php endforeach; ?>
我正在尝试通过 PHP 和 PDO FetchAll() 填充 MySql table 一列的所有结果,但我的代码只是 return一行而不是所有结果。我在这里看到了这个问题 (PHP PDO returning single row),它与我的问题类似,但我没有通过这个问题改进我的代码。
我按照 PHP 手册页 (http://php.net/manual/en/pdostatement.fetchall.php) 中的示例尝试 structure/adapt 我的代码以获取 MySql 中一列的 fetchAll() 结果 table:
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', '');
?>
我可以做些什么来改进我的代码,以使用准备好的语句和 PDO 连接从 MySql table 上的一列中填充所有结果?
fetchAll()
没问题。如果你 var_dump($result)
你会看到所有的行都在那里。
这是问题所在:
<?php foreach( $result as $row ) ?>
<option value="<?php echo $row['category_id'];?>"><?php echo $row['category'];?>
如果不使用大括号或替代语法对foreach 之后的语句进行分组,则只会重复foreach 之后的第一条语句。在这种情况下,foreach 之后的第一条语句什么也不是。结束的 PHP 标签暗示了一个 instruction separator,所以你实际上是在说:
foreach( $result as $row );
即对于每一行,什么都不做。 $row
仍然在循环后定义为数组的最后一行,这是您最终得到的一个选项。
下面是包含两个语句的替代语法示例:
<?php foreach( $result as $row ): ?>
<option value="<?php echo $row['category_id'];?>"><?php echo $row['category'];?></option>
<?php endforeach; ?>