如何从 pdo 语句中显示数组的所有值?
Posted
技术标签:
【中文标题】如何从 pdo 语句中显示数组的所有值?【英文标题】:how to display all values of an array from a pdo statement? 【发布时间】:2018-02-09 19:02:28 【问题描述】:我正在尝试将 PDO 语句中的单个值显示到单选按钮。 这是我目前所拥有的。
<?php
session_start();
$host = "localhost";
$username = "root";
$password = "";
$database = "training";
$result = "";
$connect = new PDO("mysql:host=$host; dbname=$database", $username, $password);
$query = "SELECT username FROM accounts";
$statement = $connect->prepare($query);
$statement->execute();
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
echo "<input type='radio' name ='president'>". $result . "</input>"
?>
但结果是这样的
"注意:数组到字符串的转换
C:\xampp\htdocs\testing\vote.php
"
我尝试使用print_r($result);
来检查值
[0] = admin
[1] = operation1
我希望这些值显示在单选按钮文本上。
【问题讨论】:
虽然这与您在此处询问的内容没有直接关系,但<input>
不需要结束标记,但它将 需要value
属性,如果它真的可以用作单选按钮。
【参考方案1】:
您收到通知是因为您尝试使用 echo
打印数组而不是数组元素。
您正在使用fetchAll()
。所以,$result
数组是一个二维数组。像这样:
Array
(
[0] => Array
(
[username] => John
)
[1] => Array
(
[username] => Mikaela
)
[2] => Array
(
[username] => Angela
)
)
应该是这样的:
// Fetch the values.
$query = "SELECT username FROM accounts";
//...
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
/*
* Just for testing: display results.
* Note: In the future use this complete line to display an array, if you want to.
*/
echo '<pre>' . print_r($result, TRUE) . '</pre>';
/*
* Print the radio buttons.
* Note: Note: Apply apostrophe (') and double quote (") like this.
*/
foreach ($result as $key => $item)
$username = $item['username'];
echo '<input type="radio" name="president" value="' . $username . '">' . $username . '</input>';
尝试使用异常处理。有关通过异常处理正确使用准备好的语句,请参阅this answer of mine(查看 Add.php(类))。
祝你好运!
【讨论】:
【参考方案2】:所以您已经在获取所有值,并且这些值存储在一个数组(数据列表)中。您当前正在尝试打印该列表,但 PHP 不支持使用简单的回显。您必须循环该数组并将其打印出来。
foreach($result as $item)
echo "<input type='radio' name ='president'>". $item. "</input>"
$result = 列表变量,取您已有的名称。这个循环每次都取列表中的下一个值并将其放入变量 $item 中,因此它不再是列表而是单个值。
编辑
我的初始答案只有在 fetchAll 方法调用根据 cmets 中的 Don't panic's answer 更改为时才有效
fetchAll(PDO::FETCH_COLUMN)
【讨论】:
这仍然会导致同样的错误。每个$item
都是一个关联数组。
在fetchAll
调用中使用PDO::FETCH_COLUMN
可以让您这样做。
@Don'tPanic 它不应该像海报所描述的那样包含字符串值的列表,它不会抱怨关联数组,因为现在 $item 每个都是字符串。
不确定到底发生了什么,但这并不是真正正确的print_r
输出,也不是您在使用fetchAll(PDO::FETCH_ASSOC)
时实际得到的结果。那将是一个数组数组,你知道吗?
@Don'tPanic 更新了答案以包含 fetchAll 参数的更改以上是关于如何从 pdo 语句中显示数组的所有值?的主要内容,如果未能解决你的问题,请参考以下文章