在PHP中显示完整的SQL表

时间:2015-01-25 20:06:18

标签: php mysql sql phpmyadmin

我有一张桌子:"下载",有4列:" id","文件名"," dldate"和"计算"。

我想用PHP打印整个活动表(每次我在数据库中添加一个新行时,我希望自动更新并在此处添加一行:

+------+-------+--------------------------------------+
| id   | filename   | dldate     |  count             |
+------+-------+--------------------------------------+
| 1    | file1.exe  | 12.12.2012 |   322              |
| 2    | file2.exe  | 13.12.2012 |   112              |
+------+-------+--------------------------------------+

我一直在尝试自己:

<?php
mysql_connect("localhost", "db_user", "password") or die(mysql_error());
mysql_select_db("db_name") or die(mysql_error());
$data = mysql_query("SELECT * FROM downloads") or die(mysql_error());
Print "<table border cellpadding=3>";
while($info = mysql_fetch_array( $data )) { Print "<tr>";

    Print "<th>1:</th> <td>".$info['SELECT * FROM downloads'] . " </td></tr>";

}
Print "</table>";
?>

我需要帮助。我不明白我在这里做错了什么。

1 个答案:

答案 0 :(得分:1)

您想要的简短答案:

<?php
mysql_connect("localhost", "db_user", "password") or die(mysql_error());
mysql_select_db("db_name") or die(mysql_error());

echo "<table border cellpadding=3>";

function do_the_query($id_higher_than) {
  $query = mysql_query("SELECT * FROM downloads WHERE id > ".$id_higher_than) or die(mysql_error());
  return mysql_fetch_array($query, MYSQLI_ASSOC);
}

// headers
$info = do_the_query(-1);
echo "<tr>"
foreach ($info as $col_name => $col_value) {
  echo "<td>".$col_name."</td>"
}
echo "</tr>"

// records
while(1) { // yeah, its an infinite loop
  echo "<tr>"
  foreach ($info as $col_name => $col_value) {
    echo "<td>".$col_value."</td>"
  }
  echo "</tr>"
  flush(); // this will force PHP to send the output to your browser

  // check for new records
  sleep(1);
  $info = do_the_query($info["id"]);
}

// I won't put a "</table>" because this will never happen

?>

您不想要的长答案(但我会这样做):

Web编程与桌面编程有很大不同。在桌面编程世界中,您的应用程序将无限期运行,直到用户关闭它。因此,当用户按下按钮或稍微关闭应用程序时,您将在一个进程中运行无限循环。

在网络编程世界中,您的应用必须在几毫秒内快速结束。生命周期很短。您阅读数据库,获取答案,格式化,输出并下车 - 关闭应用程序。如果用户想要获得更多更新数据,则需要手动刷新(例如按F5)。为了更友好,您可以使用JS自动刷新 - 为了获得更高级和更好的体验,您可以使用Ajax技术进行刷新并使用JS来更新HTML。

由于这种性质,网络编程世界的所有工具都设计为“快点关闭”的心态。例如,“mysql_query”函数执行查询并退出。

使用“my_sql_fetch_array”处理的内容只是已经发生的事情的缓冲区 - 您不会与db进行“直播”连接。此外,您可能不会在屏幕上看到任何内容,因为PHP将您的所有输出(“打印”,“回声”等)放在一个变量中,该变量仅在PHP应用程序关闭时发送给浏览器 - 这就是为什么我打了一个“同花顺”的电话。此外,您的PHP将在大约5分钟内被杀死 - 因为PHP会认为您有一个错误的应用程序:PHP应用程序不应该持续超过几毫秒。您可以通过更改php.ini中的“max-execution-time”指令或在执行时调用“set_time_limit”来更改此设置。这就是为什么“while”/“do..while”/“for”语句是坏词(总是更喜欢“foreach” - 所以你要避免陷入无限循环)。

毕竟,假设您使用PHP进行网络编程(而不是桌面应用程序),不要那样做。这不是网站的设计方式。

PS:我还没有测试过上面的代码(我从脑子里写过)因为我没有用PHP编程超过2年而且我没有安装PHP。因此可能包含一些语法错误。