Php 列名和值get PDO

Php 列名和值get PDO,php,pdo,foreach,Php,Pdo,Foreach,我尝试获取表中列的值。首先我要去拿桌子。然后我喜欢: $sql = $dbh->query("DESCRIBE `players` ;"); foreach ($sql->fetchAll(PDO::FETCH_NUM) as $k) { echo 'Table:' . $k[0]. '<input type="text" values=""><br> ' ; } $sql=$dbh->query(“描述`players`;”); foreach

我尝试获取表中列的值。首先我要去拿桌子。然后我喜欢:

$sql = $dbh->query("DESCRIBE `players` ;");
foreach ($sql->fetchAll(PDO::FETCH_NUM) as $k) {
    echo 'Table:'  . $k[0]. '<input type="text" values=""><br>  ' ;
}
$sql=$dbh->query(“描述`players`;”);
foreach($sql->fetchAll(PDO::FETCH_NUM)作为$k){
回显“表:”.$k[0]。
; }
那么,现在在同一个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> ';
}
函数getColumnValue($column,$name){ 全球$胸径; $sqll=(“从`players`中选择`column`,其中`name`='$name'”); $sthh=$dbh->prepare($sqll); $sthh->execute(); 返回$sthh->fetch(PDO::fetch_ASSOC); } foreach($sql->fetchAll(PDO::FETCH_NUM)作为$k){ $test=getColumnValue($k[0],'test'); 回显“表:”.$k[0]。
; }
您有两种选择:

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

    • 获取表描述(“描述表tablename”)
      • 迭代结果中的列
      • 输出单个列名
    • 获取表的内容(“从tablename中选择*…”)
      • 迭代结果中的行
      • 迭代每行中的列
        • 输出当前行和列的单元格内容
  • 您可以为此使用联合查询,尽管它有点难看,并且不能真正简化代码的结构:

    从表名中选择“colname1”作为colname1,“colname2”作为colname2,“colname3”作为colname3

    联合

    从表名中选择colname1、colname2、colname3

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


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

    不能在同一个foreach循环中执行该操作,因为必须执行和计算完全不同的查询,因此必须迭代不同的结果集。在同一个循环中没有(理智的)方法可以做到这一点。那么,我如何才能以最好的方式做到这一点呢?我想获取列名和它的值。你这样做的效率非常低。如果它能工作,它怎么会效率低下呢?那就发布一个更好的解决方案吧。谢谢你的书面回答。我将更新我的帖子,实际上我刚刚意识到我忘了提到选项2的两个子查询的列。必须有相同的类型。在尝试检索非alpha列时,这可能会出现问题,在这种情况下,您无法将列名检索为sting。