首页 > 解决方案 > 只有第一列被回显,而不是全部

问题描述

这里有什么问题:

$itemsa = "date, name, phone, address, color, height";

function users($id) {
    global $db;
    global $_POST;
    global $itemsa;
    $sql = "select *  from users where id = :aid limit 1";
    $st = $db->prepare($sql);
    $st -> execute([":aid" => $id]);
    $arra = explode(', ', $itemsa);
    $items = "";
    $x = 0;
    while ($row = $st->fetch()) {
        $items .=
        "<div class='rtitle' data-id = " . $row['id'] . ">" . mb_strtoupper($arra[$x]) . "</div>\n" .
        "<div class='rstory' data-id = " . $row['id'] . ">" . $row[$x] . "</div>\n";
        $x++;
    }
    echo $items;
}

结果:

<div class='rtitle' data-id = 3>DATE</div>
<div class='rstory' data-id = 3>21-09-2018 00:16</div>

所以只有第一列被回显,我预计有 6 个,即全部。

标签: php

解决方案


您应该循环传递给函数的列名数组,而不是获取结果,因为您只从查询中返回 ONE ROW,并且您对该行中返回的列感兴趣。

您还应该将所有这些全局变量(除了 $_POST 它是一个全局变量并且您似乎并没有在函数中使用)作为参数传递给您的函数调用。

function users($db, $id, $itemsa) {

    $sql = "select *  from users where id = :aid limit 1";
    $st = $db->prepare($sql);
    $st -> execute([":aid" => $id]);

    // you only have one row returned, so a simple fetch
    $row = $st->fetch(PDO::FETCH_ASSOC);

    $arra = explode(', ', $itemsa);
    $items = "";

    foreach ($itemsa as $col )  {
        $items .=
        "<div class='rtitle' data-id = " . $row['id'] . ">" . mb_strtoupper($row[$col]) . "</div>\n" .
        "<div class='rstory' data-id = " . $row['id'] . ">" . $row[$col] . "</div>\n";

    }
    echo $items;
}

$itemsa = "date, name, phone, address, color, height";

users($db, $id, $itemsa);

推荐阅读