打印数据库的所有字段

Posted

技术标签:

【中文标题】打印数据库的所有字段【英文标题】:Printing all fields of a database 【发布时间】:2014-09-01 19:03:40 【问题描述】:

我的目标

我正在尝试为我的数据库中的每个表格显示一个 html 表格,它应该有:

包含列名的第一行 包含字段的其他行(每条记录一个)

就像这个:

我的代码

<?php
$num = 0;
$connessione = mysqli_connect();
$tables = mysqli_query($connessione,"SHOW TABLES");
while($row = mysqli_fetch_array($tables))
        echo '<i>'.$row['Tables_in_my_db'].'</i><table border="1px"><tr>';
        $columns = mysqli_query($connessione,"SHOW COLUMNS FROM ".$row['Tables_in_my_db']);
            while($row2 = mysqli_fetch_array($columns))
            echo '<td><b>'.$row2['Field'].'</b></td> ';
                
            echo '</tr>';
$query = "SELECT * FROM ".$row['Tables_in_my_db'];
             $fields = mysqli_query($connessione,$query);
            echo '<tr>';
                while($row3 = mysqli_fetch_array($fields))
                echo '<td>'.$row3[$num].'</td>';
                $temp = $num+1;
                if($row3[$temp]=="")break;
                $num = $temp;
            
       echo '</tr></table>';
       $num = 0;
   
?>

什么不工作

我只得到每个表的前两行作为输出(第一行包含列的名称,第二行包含一些不在同一数据库记录中的值)。

调试

error_reporting(E_ALL) 返回一堆Notice: Undefined offset on line 19

我的问题

如何修复此代码?

【问题讨论】:

【参考方案1】:

试试这个:

$connessione = mysqli_connect();
$tables = mysqli_query( $connessione, "SHOW TABLES" );
while( $row = mysqli_fetch_array( $tables ) )
    echo '<i>' . $row[ 'Tables_in_my_db' ] . '</i><table border="1px">';
    // Show columns
    $columns = mysqli_query( $connessione, "SHOW COLUMNS FROM ".$row[ 'Tables_in_my_db' ] );

    // Here we collect column names to output row values in the same order
    $columnNames = array();
    echo '<tr>';
    while( $row2 = mysqli_fetch_array( $columns ) )
        $columnNames []= $row2[ 'Field' ];
        echo '<td><b>' . $row2[ 'Field' ] . '</b></td> ';
    
    echo '</tr>';

    // Show table rows
    $query = "SELECT * FROM " . $row[ 'Tables_in_my_db' ];
    $fields = mysqli_query( $connessione, $query );

    $maxRows = 10;
    while( $row3 = mysqli_fetch_array( $fields ) )
        echo '<tr>';
        foreach( $columnNames as $columnName ) 
            echo '<td>' . $row3[ $columnName ] . '</td>';
        
        echo '</tr>';
        $maxRows--;
        if( !$maxRows ) 
            break;
        
    

    echo '</table>';

【讨论】:

【参考方案2】:

我不确定这是否是问题所在,但您可能想要更改此设置:

$query = "SELECT * FROM ".$row['Tables_in_my_db'];
         $fields = mysqli_query($connessione,$query);
        echo '<tr>';
            while($row3 = mysqli_fetch_array($fields))
            echo '<td>'.$row3[$num].'</td>';
            $temp = $num+1;
            if($row3[$temp]=="")break;
            $num = $temp;
        
   echo '</tr></table>';

进入这个:

$query = "SELECT * FROM ".$row['Tables_in_my_db'];
         $fields = mysqli_query($connessione,$query);
        $output = '<tr>';
            while($row3 = mysqli_fetch_array($fields))
            $output .= '<td>'.$row3[$num].'</td>';
            $temp = $num+1;
            if($row3[$temp]=="")break;
            $num = $temp;
        
   $output .= '</tr></table>';
   echo $output;

代码的第一部分也是如此

【讨论】:

感谢您的回答 :) 使用您建议的代码,我收到警告:mysqli_fetch_array() 期望参数 1 为 mysqli_result,在第 16 行为生成的每个表提供布尔值,该表只有第一行(列名的那个)

以上是关于打印数据库的所有字段的主要内容,如果未能解决你的问题,请参考以下文章

因为该组节的条件字段不存在或无效所以无法打印

打印 CSV 的前 N ​​行,其中引用的字段可以包含换行符

使用可变文件名访问 2010 打印到 .pdf

PHP从数据库中为每个日期打印日期数据

玩家对象的元胞数组未打印所有字段

Android中是怎样防止SQL注入的?