【问题标题】:PHP MySQL How to skip displaying a fieldPHP MySQL如何跳过显示字段
【发布时间】:2014-10-09 12:20:11
【问题描述】:

我的表 MYTABLE 包含以下字段:ID、PASSWORD、COL1、COL2、COL3、DATE 我想获取并显示 html 表中的所有记录,但跳过 ID 和 PASSWORD 字段... 我正在使用以下不起作用的代码:

$query = "SELECT * FROM MYTABLE WHERE 1";
$results = mysql_query($query, $conn) or die(mysql_error());
echo "<tr>";
while ($r = mysql_fetch_assoc($results)) {
    foreach ($r as $item) { 
        // let's not display ID and password
        if ($r == 'ID' || $r == 'PASSWORD') continue; // this is the line that I want to figure out 
    echo "<td>$item</td>";  
    } // end for loop
} // end while  
unset($item);
echo "</tr>";

显然有不止一种方法可以做到这一点,例如我可以用 for 循环替换 foreach 循环:

for ($i=0;$i<=6;$i++) {
    if ($i == 0 || $i == 1 ) continue;
    echo "<td>$r[$i]</td>";
} // end for

这将跳过 ID 和 PASSWORD 字段,但我不想使用它,因为我在多个表上运行代码(表名是从 html 选择标记中获取的)并且这些表可能不一样字段/列的数量(但它们总是有 ID 和密码)。

我也可以使用 SQL 语句(我不想这样做),但是我必须查询临时文件,删除 ID、PASSWORD 列,然后从临时表中获取。 (顺便说一句,为什么我应该用 SQL 而不是 PHP 来做这件事,有一个令人信服的理由吗?)

【问题讨论】:

  • 为什么不能只使用“从 MYTABLE 中选择 COL1、COL2、COL3、DATE”?
  • 因为他很伤心:“这将跳过 ID 和 PASSWORD 字段但我不想使用它,因为我在多个表上运行代码(表名是从 html select标签)"

标签: php mysql foreach field skip


【解决方案1】:
foreach ($r as $k => $item) { 
    // let's not display ID and password
    if ($k == 'ID' || $k == 'PASSWORD') continue;
    echo "<td>$item</td>";  
}

这完全符合您的要求。
我希望这个结果现在对你有用,之后你会从中进化。

【讨论】:

    【解决方案2】:

    我建议你这样做:

    $query = "SELECT COL1, COL2, COL3, DATE FROM MYTABLE WHERE 1";
    

    【讨论】:

    • 感谢您的回答,但是就像我说的那样,我不应该使用 SQL 这样做,因为: 1. 真正的表有超过 24 个字段/列 2. 有很多表,但它们没有有相同数量的字段
    • 抱歉,我一定是读得太快了,以为你只想重复使用循环。幸运的是你得到了更多的答案:-)
    【解决方案3】:

    试试这个:

    $query = "SELECT * FROM MYTABLE WHERE 1";
    $results = mysql_query($query, $conn) or die(mysql_error());
    echo "<tr>";
    while ($r = mysql_fetch_assoc($results)) {
        foreach ($r as $key => $item) { 
            // let's not display ID and password
            if (!in_array($key, array('PASSWORD', 'ID'))) {
                echo "<td>$item</td>";  
            }
        } // end for loop
    } // end while  
    echo "</tr>";
    

    【讨论】:

    • 我差点忘了 in_array。非常感谢你,我正在解决这个问题。
    • 关键不是 in_array,我只是用它来不做 OR 运算符。重点是 $r 作为 $key => $item。
    • 哦,是的,我同意伙计,这是 $r 作为 $k=>$item。我只是注意到 in_array 的用法。再次感谢您的帮助。
    【解决方案4】:

    放轻松..

    <?php
    $query = "SELECT  COL1, COL2, COL3, DATE FROM MYTABLE WHERE ..whatever..";
    $result = mysql_query($query);
    
    if ($result) {
        while ($row = mysql_fetch_array($result)) {
            echo "<tr>";
            echo "<td>".$row["COL1"]."</td>";
            echo "<td>".$row["COL2"]."</td>";
            echo "<td>".$row["COL3"]."</td>";
            echo "<td>".$row["DATA"]."</td>";
            echo "<tr>";
        }
    }
    
    ?>
    

    【讨论】:

    • 不能那样做。有多个表,它们的字段数量不相等,它们的字段也没有相同的名称(ID 和 PASSWORD 除外)。感谢您的回答。
    猜你喜欢
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多