简体   繁体   中英

How do I display all tables in a database as HTML tables?

I have selected values from a single MySQL table and displayed them in a HTML table many times before using PHP, like this:

$query = "SELECT * FROM main";

$result = $connection->query($query);

while ($row = mysqli_fetch_assoc($result)) {
  echo "<tr>";
  echo "<td>" . $row['row1'] . "</td>";
  echo "<td>" . $row['row2'] . "</td>";
  echo "<td>" . $row['row3'] . "</td>";
  echo "<td>" . $row['row4'] . "</td>";
}

How can I display all of the tables in a certain database in the same way? I need it to be dynamic, so that if new tables are added to that database, they will show up on the webpage as well.

This is something I have tried, that doesn't seem to work. Perhaps I can get some feedback?

$query1 = "SHOW TABLES FROM db_name";

// This is equal to the number of tables in the database.
$query2 = "SELECT COUNT(*) FROM main";

$result1 = $connection->query($query1);

$result2 = $connection->query($query2);

$row2 = mysqli_fetch_assoc($result2);

$count = $row2["COUNT(*)"];

$counter = 1;

while ($row1 = mysqli_fetch_array($result1)) {
        ${getter.$counter++} = "SELECT * FROM " . $row[0];
    }

<table>
        <?php
        for ($i = 1; $i <= $count; $i++) {
                ${request.$i} = $connection->query(${getter.$i});
                while ($row3 = mysqli_fetch_assoc(${request.$i})) {
                        echo "<tr>";
                        echo "<td>" . $row['row1'] . "</td>";
                        echo "<td>" . $row['row2'] . "</td>";
                        echo "<td>" . $row['row3'] . "</td>";
                        echo "<td>" . $row['row4'] . "</td>";
                }
        }
        ?>
</table>

Thanks.

Updated Answer:

Try the following code

<?php

require_once('includes/api/db-config.php');
$db = Database::getInstance();
$conn = $db->getConnection();
$dbname = 'databaseName';

$sql = "SHOW TABLES FROM {$dbname}";
$result = mysqli_query($conn,$sql);

if (!$result) {
    echo 'MySQL Error: ' . mysqli_error($conn);
    exit;
}

while ($row = mysqli_fetch_row($result)) {
    $tableSql = "SELECT * FROM {$row[0]}";
    $tableResult = mysqli_query($conn,$tableSql);
    $Response = "<tr>";
    while ($tableRow = mysqli_fetch_row($tableResult)) {
        $Response .= "<td>{$tableRow["id"]}</td>";
        $Response .= "<td>{$tableRow["title"]}</td>";
        $Response .= "<td>{$tableRow["description"]}</td>";
        $Response .= "<td>{$tableRow["action"]}</td>";
        $Response .= "<td>{$tableRow["mods"]}</td>";
        $Response .= "<td>{$tableRow["date"]}</td>";
    }
    $Response .= "</tr>";

}

?>

Now you have data from all the tables one by one now you can display the data in html table.

If you want to loop through all your tables and list the data from each one in a HTML table, including showing the column names, then this should work for you:

//get all the tables in the database
$sql = "SHOW TABLES FROM db_name";
$result = $connection->query($sql);

if ($result === false) die($conn->error);

//loop through the list of tables
while ($row = $result->fetch_row()) {
    echo "<h2>Table: ".$row[0]."</h2>";

    //now, for the current table, get all the data and loop through the rows
    $sql2 = "SELECT * FROM ".$row[0];
    $result2 = $connection->query($sql2);

    if ($result2)
    {
        //get the column names
        $fields = $result2->fetch_fields();
        echo "<table><thead><tr>";

        //loop through the field names and output each one as a column heading
        foreach ($fields as $fld)
        {
          echo "<th>".$fld->name."</th>";
        }
        echo "</tr></thead><tbody>";

        //get the rows
        while ($row2 = $result2->fetch_row()) {
            echo "<tr>";

            //loop through each data value in the row and output into a HTML table cell
            foreach ($row2 as $cell) {
                echo "<td>".$cell."</td>";
            }
            echo "</tr>";
        }

        echo "</tbody></table><hr>";
    }
    else
    {
      echo "Problem retrieving data for ".$row[0].": ".$conn->error;
    }
}

this works for me

require_once('db.php');

   $dbname = 'sport';

   $sql = "SHOW TABLES FROM $dbname"; $result =
   mysqli_query($conn,$sql);

   if (!$result) {
       echo "DB Error, could not list tables\n";
       echo 'MySQL Error: ' . mysqli_error($conn);
       exit; }

   while ($row = mysqli_fetch_row($result)) {   //print_r($row);
       echo "Table: {$row[0]}\n"; }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM