【问题标题】:Column name and value get PDO列名和值获取 PDO
【发布时间】:2014-05-27 09:27:00
【问题描述】:

我尝试获取表中列的值。首先,我想获取表格。然后我确实喜欢:

$sql = $dbh->query("DESCRIBE `players` ;");
foreach ($sql->fetchAll(PDO::FETCH_NUM) as $k) {
    echo 'Table:'  . $k[0]. '<input type="text" values=""><br>  ' ;
}

那么,现在为同一个 foreach 中的每个表获取价值的最佳方法是什么?

解决方法:

function getColumnValue($column,$name) {
        global $dbh;
        $sqll = ("SELECT `$column` FROM `players` WHERE `name`='$name' ");
        $sthh = $dbh->prepare($sqll);
        $sthh->execute();
        return $sthh->fetch(PDO::FETCH_ASSOC);
}


foreach ($sql->fetchAll(PDO::FETCH_NUM) as $k) {
    $test = getColumnValue($k[0],'Test');
    echo 'Table: '.$k[0] .' <input type="text" value="'.$test[$k[0]].'" style="color:#000;"> <br> ';
}

【问题讨论】:

  • 您不能在同一个 foreach 循环中执行此操作,因为您必须执行和评估完全不同的查询,因此您必须遍历不同的结果集。 在同一个循环中没有(理智的)方法可以做到这一点。
  • 那么我怎样才能做到最好呢?我想获取列名及其值。
  • 你的做法非常低效
  • 行了怎么会低效呢?然后发布一个更好的解决方案。

标签: php pdo foreach


【解决方案1】:

您有两种选择:

  1. 您使用两个单独的查询,正如我在对您的问题的评论中所解释的那样:一个像您已经做的那样获取表描述,第二个是获取表内容(行)。您需要两个(实际上是三个)循环来迭代结果,大致如下:

    • 获取表描述(“DESCRIBE TABLE 表名”)
      • 遍历结果中的列
      • 输出单列名
    • 获取表的内容(“SELECT * FROM tablename ...”)
      • 遍历结果中的行
      • 遍历每行内的列
        • 输出当前行和列的单元格内容
  2. 您可以为此使用联合查询,尽管它有点难看并且并没有真正简化代码的结构:

    SELECT 'colname1' AS colname1, 'colname2' AS colname2, 'colname3' AS colname3 FROM table name

    联合

    从表名中选择 colname1、colname2、colname3

    这个单一查询将两个包含的单独子查询的结果连接起来,因此它给出了您最初要求的结果。您只需确保在两个子查询中查询相同数量和类型的列。但请注意,这不是很好的风格,因为它很难调试和维护。

一般来说,获取列名以输出它们是否真的是个好主意是值得怀疑的。我会三思而后行:您将存储架构和可视化合并到一个单独的层中,这是一个坏主意:当您稍后必须进行更改时会遇到大问题。通常,出于充分的理由,应该将这些不同的方面分开。

【讨论】:

  • 感谢您写得很好的回答。我会更新我的帖子我是怎么做到的
  • 其实我才意识到我忘了提到选项2的两个子查询的列必须具有相同的类型。在尝试检索非 alpha 列时,这可能是一个问题,在这种情况下,您无法将列名检索为字符串。
猜你喜欢
  • 2011-07-22
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 2018-04-07
  • 1970-01-01
相关资源
最近更新 更多