打印数据库的所有字段
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 行为生成的每个表提供布尔值,该表只有第一行(列名的那个)以上是关于打印数据库的所有字段的主要内容,如果未能解决你的问题,请参考以下文章