【问题标题】:How to echo out table rows from the db (php)如何从数据库中回显表行(php)
【发布时间】:2011-02-27 14:16:21
【问题描述】:

我想从特定查询中回显所有内容。如果 echo $res 我只得到其中一个字符串。如果我更改第二个 mysql_result 参数,我可以获得第二个、第二个等,但我想要的是所有这些,一个接一个地回显。如何将 mysql 结果变成我可以使用的东西?

我试过了:

$query="SELECT * FROM MY_TABLE";
$results = mysql_query($query);
$res = mysql_result($results, 0);

while ($res->fetchInto($row)) {
    echo "<form id=\"$row[0]\" name=\"$row[0]\" method=post action=\"\"><td style=\"border-bottom:1px solid black\">$row[0]</td><td style=\"border-bottom:1px solid black\"><input type=hidden name=\"remove\" value=\"$row[0]\"><input type=submit value=Remove></td><tr></form>\n";
}

【问题讨论】:

标签: php mysql


【解决方案1】:
 $result= mysql_query("SELECT * FROM MY_TABLE");
 while($row = mysql_fetch_array($result)){
      echo $row['whatEverColumnName'];
 }

【讨论】:

  • 其实这个答案只回显每一行的一列。
  • 这个“sn-p 转储”缺少教育解释。
【解决方案2】:
$sql = "SELECT * FROM MY_TABLE";
$result = mysqli_query($conn, $sql); // First parameter is just return of "mysqli_connect()" function
echo "<br>";
echo "<table border='1'>";
while ($row = mysqli_fetch_assoc($result)) { // Important line !!! Check summary get row on array ..
    echo "<tr>";
    foreach ($row as $field => $value) { // I you want you can right this line like this: foreach($row as $value) {
        echo "<td>" . $value . "</td>"; // I just did not use "htmlspecialchars()" function. 
    }
    echo "</tr>";
}
echo "</table>";

【讨论】:

【解决方案3】:

扩展已接受的答案:

function mysql_query_or_die($query) {
    $result = mysql_query($query);
    if ($result)
        return $result;
    else {
        $err = mysql_error();
        die("<br>{$query}<br>*** {$err} ***<br>");
    }
}

...
$query = "SELECT * FROM my_table";
$result = mysql_query_or_die($query);
echo("<table>");
$first_row = true;
while ($row = mysql_fetch_assoc($result)) {
    if ($first_row) {
        $first_row = false;
        // Output header row from keys.
        echo '<tr>';
        foreach($row as $key => $field) {
            echo '<th>' . htmlspecialchars($key) . '</th>';
        }
        echo '</tr>';
    }
    echo '<tr>';
    foreach($row as $key => $field) {
        echo '<td>' . htmlspecialchars($field) . '</td>';
    }
    echo '</tr>';
}
echo("</table>");

好处:

  • 使用 mysql_fetch_assoc(而不是没有第二个参数来指定类型的 mysql_fetch_array),我们避免获取每个字段两次,一次用于数字索引(0、1、2、..),第二次用于关联键。

  • 将字段名称显示为表格的标题行。

  • 演示如何在遍历行的字段时为每个字段同时获取 column name ($key) 和 value ($field)。

  • 包裹在&lt;table&gt; 中,因此可以正常显示。

  • (可选)如果查询失败,则显示查询字符串和 mysql_error。

示例输出:

Id      Name
777     Aardvark
50      Lion
9999    Zebra

【讨论】:

    【解决方案4】:
    $sql = "SELECT * FROM YOUR_TABLE_NAME";
    $result = mysqli_query($conn, $sql); // First parameter is just return of "mysqli_connect()" function
    echo "<br>";
    echo "<table border='1'>";
    while ($row = mysqli_fetch_assoc($result)) { // Important line !!!
        echo "<tr>";
        foreach ($row as $field => $value) { // If you want you can right this line like this: foreach($row as $value) {
            echo "<td>" . $value . "</td>"; 
        }
        echo "</tr>";
    }
    echo "</table>";
    

    在 PHP 7.x 中,您应该使用 mysqli 函数,而在 while 循环条件中最重要的函数使用“mysqli_fetch_assoc()”函数而不是“mysqli_fetch_array()”函数。如果你使用“mysqli_fetch_array()”,你会看到你的结果是重复的。试试这两个,看看有什么不同。

    【讨论】:

      【解决方案5】:

      嵌套循环显示结果表的所有行和列:

      $rows = mysql_num_rows($result);
      $cols = mysql_num_fields($result);
      for( $i = 0; $i<$rows; $i++ ) {
         for( $j = 0; $j<$cols; $j++ ) {
           echo mysql_result($result, $i, $j)."<br>";
         }
      }
      

      可以通过数据解密/解码、错误检查和显示前的 html 格式来变得更复杂。

      在 MS Edge 和 G Chrome、PHP 5.6 中测试

      【讨论】:

        【解决方案6】:

        此页面上的所有 sn-ps 的大小都可以大大减小。

        mysqli 结果集对象可以立即提供给foreach()(因为它是“可迭代的”),这样就无需进行迭代的_fetch() 调用。

        插入每一行将允许您的代码在不修改代码的情况下正确打印结果集中的所有列数据。

        $sql = "SELECT * FROM MY_TABLE";
        echo '<table>';
            foreach (mysqli_query($conn, $sql) as $row) {
                echo '<tr><td>' . implode('</td><td>', $row) . '</td></tr>';
            }
        echo '</table>';
        

        如果要编码html实体,可以映射每一行:

        implode('</td><td>' . array_map('htmlspecialchars', $row))
        

        如果您不想使用 implode,您可以使用关联数组语法简单地访问所有行数据。 ($row['id'])

        【讨论】:

          猜你喜欢
          • 2016-03-04
          • 2018-07-28
          • 1970-01-01
          • 2014-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-22
          • 1970-01-01
          相关资源
          最近更新 更多