显示mysql表中的所有记录
Posted
技术标签:
【中文标题】显示mysql表中的所有记录【英文标题】:Displaying all records in a mysql table 【发布时间】:2013-01-27 08:07:15 【问题描述】:下面的代码可以很好地打印数据库表中的一条记录,但我真正想做的是以类似于我的代码的格式打印 mysql 表中的所有记录。
IE:字段名称作为 html 表中每一列的标题以及标题下方的条目。希望这对某人有意义;)
$raw = mysql_query("SELECT * FROM tbl_gas_meters");
$allresults = mysql_fetch_array($raw);
$field = mysql_query("SELECT * FROM tbl_gas_meters");
$num_fields = mysql_num_fields($raw);
$num_rows = mysql_num_rows($raw);
$i = 1;
print "<table border=1>\n";
while ($i < $num_fields)
echo "<tr>";
echo "<b><td>" . mysql_field_name($field, $i) . "</td></b>";
//echo ": ";
echo '<td><font color ="red">' . $allresults[$i] . '</font></td>';
$i++;
echo "</tr>";
//echo "<br>";
print "</table>";
【问题讨论】:
首先,您永远不想在同一页面上多次运行相同的mysql
查询,请使用count。其次,您希望在显示标题后循环遍历每一行的count
。
在循环中使用mysql_fetch_assoc
考虑使用 PDO 或 mysqli_。
查看psoug.org/snippet/php-Show-mySQL-table-as-HTML_221.htm,了解有关如何使用mysql
函数执行您尝试执行的操作的基本信息。
感谢乔恩,这帮助很大。还没有准备好处理对象,因为我仍然很难掌握基础知识,但这非常有帮助:)
【参考方案1】:
作为附加信息,您可能应该使用 PDO。它具有更多的功能,有助于学习如何准备 SQL 语句。如果您编写更复杂的代码,它也会为您提供更好的服务。
http://www.php.net/manual/en/intro.pdo.php
此示例使用对象而不是数组。不一定重要,但它使用的字符较少,所以我喜欢它。当您深入了解对象时,差异确实会出现,但在此示例中没有。
//connection information
$user = "your_mysql_user";
$pass = "your_mysql_user_pass";
$dbh = new PDO('mysql:host=your_hostname;dbname=your_db;charset=UTF-8', $user, $pass);
//prepare statement to query table
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
//loop over all table rows and fetch them as an object
while($result = $sth->fetch(PDO::FETCH_OBJ))
//print out the fruits name in this case.
print $result->name;
print("\n");
print $result->colour;
print("\n");
您可能还想查看准备好的语句。这有助于防止注射。出于安全原因,注入是不好的。这是该页面。
http://www.php.net/manual/en/pdostatement.bindparam.php
您可能还应该考虑清理您的用户输入。只是提醒一下,与您当前的情况无关。
还可以尝试使用 PDO 获取所有字段名称
$q = $dbh->prepare("DESCRIBE tablename");
$q->execute();
$table_fields = $q->fetchAll(PDO::FETCH_COLUMN);
一旦您拥有所有表格字段,使用<div>
甚至<table>
就可以很容易地使用<th>
来安排它们。
愉快地学习 PHP。很有趣。
【讨论】:
虽然有用,但这只是从手册中复制/粘贴的。并且它没有解决这个问题,即如何在 HTML 表中显示 mySql 表的内容,包括基于 MySql 表列名的标题行。【参考方案2】:谢谢大家,知道了。
$table = 'tbl_gas_meters';
$result = MYSQL_QUERY("SELECT * FROM $table");
$fields_num = MYSQL_NUM_FIELDS($result);
ECHO "<h1>Table: $table</h1>";
ECHO "<table border='1'><tr>";
// printing table headers
FOR($i=0; $i<$fields_num; $i++)
$field = MYSQL_FETCH_FIELD($result);
ECHO "<td>$field->name</td>";
ECHO "</tr>\n";
// printing table rows
WHILE($row = MYSQL_FETCH_ROW($result))
ECHO "<tr>";
// $row is array... foreach( .. ) puts every element
// of $row to $cell variable
FOREACH($row AS $cell)
ECHO "<td>$cell</td>";
ECHO "</tr>\n";
【讨论】:
【参考方案3】:while ( $row = mysql_fetch_array($field) )
echo $row['fieldname'];
//stuff
【讨论】:
【参考方案4】:试试这个:
$raw = mysql_query("SELECT * FROM tbl_gas_meters");
$allresults = mysql_fetch_array($raw);
$field = mysql_query("SELECT * FROM tbl_gas_meters");
while($row = mysql_fetch_assoc($field))
echo $row['your field name here'];
请注意,mysql_* 函数在新的 php 版本中已弃用,因此请改用 mysqli 或 PDO。
【讨论】:
【参考方案5】:谢谢!我调整了其中一些答案,以从任何表的所有记录中绘制一个表,而无需指定字段名称。只需将其粘贴到 .php 文件中并更改连接信息:
<?php
// Authentication detail for connection
$servername = "localhost";
$username = "xxxxxxxxxx";
$password = "xxxxxxxxxx";
$dbname = "xxxxxxxxxx";
$tablename = "xxxxxxxxxx";
$orderby = "1 DESC LIMIT 500"; // column # to sort & max # of records to display
// Create & check connection
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error)
die("Connection failed: " . $conn->connect_error); // quit
// Run query & verify success
$sql = "SELECT * FROM $tablename ORDER BY $orderby";
if ($result = $conn->query($sql))
$conn->close(); // Close table
$fields_num = $result->field_count;
$count_rows = $result->num_rows;
if ($count_rows == 0)
die ("No data found in table: [" . $tablename . "]" ); //quit
else
$conn->close(); // Close table
die ("Error running SQL:<br>" . $sql ); //quit
// Start drawing table
echo "<!DOCTYPE html><html><head><title>$tablename</title>";
echo "<style> table, th, td border: 1px solid black; border-collapse: collapse; </style></head>";
echo "<body><span style='font-size:18px'>Table: <strong>$tablename</strong></span><br>";
echo "<span style='font-size:10px'>($count_rows records, $fields_num fields)</span><br>";
echo "<br><span style='font-size:10px'><table><tr>";
// Print table Field Names
while ($finfo = $result->fetch_field())
echo "<td><center><strong>$finfo->name</strong></center></td>";
echo "</tr>"; // Finished Field Names
/* Loop through records in object array */
while ($row = $result->fetch_row())
echo "<tr>"; // start data row
for( $i = 0; $i<$fields_num; $i++ )
echo "<td>$row[$i]</td>";
echo "</tr>"; // end data row
echo "</table>"; // End table
$result->close(); // Free result set
?>
【讨论】:
(别忘了▲ 点赞 有帮助的答案和 到✓+▲ 接受并支持帮助您解决问题的答案!)以上是关于显示mysql表中的所有记录的主要内容,如果未能解决你的问题,请参考以下文章
如何合并 MySQL 表中的两条冗余记录,维护所有 PK/FK 关系?