如何在不知道 $row 像 phpmyadmin 的情况下将 mysql 表数据输出到 html 表中

Posted

技术标签:

【中文标题】如何在不知道 $row 像 phpmyadmin 的情况下将 mysql 表数据输出到 html 表中【英文标题】:how to output mysql table data into an html table without knowing what $row is like phpmyadmin 【发布时间】:2019-08-01 01:03:34 【问题描述】:

好的,所以我正在尝试创建一个与 phpmyadmin 具有相同基本功能的 localhost 站点,并且除了显示表的数据之外一切正常。

这是我想要完成的一个示例:

虽然我不确定如何做到这一点。这是一些代码,可以向您展示我现在拥有的东西

<div class="content">
    <?php $query2 = "SELECT * FROM " . $table; ?>
    <div class="query-class">
        <?php echo $query2; ?>
    </div>
    <h1>
        Tables In <?php echo $db; ?>
    </h1>
    <table>


        <?php
            $columquery = "SHOW COLUMNS FROM " . $table;
            $columresult = mysql_query($columquery);
            while ($row3 = mysql_fetch_array($columresult)) 
                echo "<th>" . $row3['Field'] . "</th>";
            
        ?>

        <?php

            $result2 = mysql_query($query2);
            while ($row2 = mysql_fetch_array($result2)) 
                foreach($row2 as $var) 
                    echo "<tr><td>" . $var . "</td></tr>";   
                

            
        ?>
        </table>
</div>

是的,是的,我知道这很可怕。

【问题讨论】:

您正在存储纯文本密码和哈希?? 这段代码会发生什么?你的问题在哪里?请停止使用mysql_ 函数。使用和更新驱动程序。另外取决于$table$db 的定义方式,这可能是一个非常危险的脚本。 描述或展示。密码不应该被加密,它们应该被散列。 mysql_query api 已被弃用,并且在版本 7 之后已从 PHP 中完全删除。代码容易受到利用 - 引入 mysqli 并为此准备声明可能是明智之举深入了解之前的过程? "代码容易被利用" — 老实说,代码看起来有点像恶意软件。无意冒犯,但我在受感染的服务器上看到了很多这样的东西。你为什么还要写它?如果您需要 phpmyadmin 功能,只需使用 phpmyadmin 【参考方案1】:

其他答案使用mysqli API,而您使用的是旧的,不再受支持的mysql API。我真的建议升级到mysqliPDO,但如果您想继续使用mysql,您可以使用以下解决方案:

<div class="content">
    <?php $query2 = "SELECT * FROM " . $table; ?>
    <div class="query-class">
        <?php echo $query2; ?>
    </div>
    <h1>
        Tables In <?php echo $db; ?>
    </h1>
    <table>
        <?php
            $shouldOutputHeaders = true;
            $result2 = mysql_query($query2);

            while ($row2 = mysql_fetch_assoc($result2)) 
                if ($shouldOutputHeaders) 
                    echo "<tr>";
                    foreach (array_keys($row2) as $header) 
                        echo "<th>" . $header . "</th>"; 
                    
                    echo "</tr>";

                    $shouldOutputHeaders = false;
                

                echo "<tr>";
                foreach ($row2 as $var) 
                    echo "<td>" . $var . "</td>"; 
                
                echo "</tr>";
            
        ?>
    </table>
</div>

【讨论】:

【参考方案2】:

我添加了一些转义,只在需要时查询数据库:

// Print table tags
echo "<table>";

// Print out records 
$q = mysql_query("SELECT * FROM $table;");
if($res = $result->fetch_all(MYSQLI_ASSOC))
    // Print out columns 
    $columns = array_keys($res[0]);
    echo'<tr><th>'.implode('</th><th>', array_map('htmlspecialchars',$columns).'</th></tr>';
    // Print out table data
    echo'<tr><td>'.implode('</td><td>', array_map('htmlspecialchars',$res).'</td></tr>';
 else 
    // IFF there is no data, print out columns
    $q = mysql_query("SHOW COLUMNS FROM $table;");
    if($res = $result->fetch_all(MYSQLI_ASSOC))
        // Print columns
        echo'<tr><th>'.implode('</th><th>', array_map('htmlspecialchars',$res).'</th></tr>';
    

echo '</table>';

希望对你有帮助,

【讨论】:

【参考方案3】:

我认为您正在寻找像下面这样非常丑陋的东西。我在垃圾箱里找到的。我对它的任何使用概不负责:

<?php
$db=Db::getConnection(); // singleton
$this->var['result']=$db->query($_POST['query']);

if (isset($this->var['result'])) 
    echo '<table cellpadding="5" cellspacing="2" border="1"><tbody>';
    $titles=array_keys(@$this->var['result'][0]);
    echo '<tr>';
    foreach($titles as $title)
        echo '<th>'.$title.'</th>';
    echo '</tr>';

    foreach($this->var['result'] as $row) 
        echo '<tr>';
        foreach($row as $cell) 
            echo '<td>'.$cell.'</td>';
        
        echo '</tr>';
    

    echo '</tbody></table>';

?>

Db 是包含 mysqli 私有对象的标准单例。 query() 包含类似

$sql = $this->mysqli->query($query);
$this->lastInsertId = $this->mysqli->insert_id;
$errno = $this->mysqli->connect_errno;
if ($errno === 0) 
    if ($this->mysqli->field_count > 0) 
        while ($row = $sql->fetch_assoc()) $response[] = $row;
        return $response;
    else
        return true;
    

创建“数组数组”响应。适合您正在寻找的输出。

【讨论】:

【参考方案4】:

如果我理解你的话,你需要 mysqli_fetch_row。

$q= "SELECT * FROM  table";
$result = $mysqli->query($q)
    while ($row = $result->fetch_row()) 
        print  ("$row[0], $row[1]);
    

【讨论】:

以上是关于如何在不知道 $row 像 phpmyadmin 的情况下将 mysql 表数据输出到 html 表中的主要内容,如果未能解决你的问题,请参考以下文章

如何在不影响 phpMyAdmin 的情况下从 mysql 中巧妙地删除 pma 表

如何在不删除数据库的情况下删除 phpMyAdmin 中数据库中所有表的内容?

Phpmyadmin - 将新列导入现有记录

如何从phpmyadmin中的数据库中的特定表中导出特定列

如何在不添加“Row.names”列的情况下按行名合并数据框?

MySQL phpMyAdmin 从文本导入而没有主键?