如何从 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

我希望这些值显示在单选按钮文本上。

【问题讨论】:

虽然这与您在此处询问的内容没有直接关系,但&lt;input&gt; 不需要结束标记,但它 需要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 语句中显示数组的所有值?的主要内容,如果未能解决你的问题,请参考以下文章

SQL 如何取出数据库中一列的所有值.....

PDO从先前选择插入的绑定参数

选择选择,如何将多个值放入 $bind 数组

PDO - 使用准备好的语句将所有 sql 数据放入 html 表中

MySQL IN 语句的 PDO 绑定值 [重复]

使用 PHP PDO 在 DB 中保存来自文本框的值(从 DB 中获取值时显示的值)