PHP常量SQL查询

PHP常量SQL查询,php,javascript,mysql,crash,Php,Javascript,Mysql,Crash,我需要每隔1秒不断读取数据库中的数据,以获取最新的值。这是我的密码: <?php // connect to the "tests" database $conn = new mysqli('localhost', 'root','','Test'); // check connection if (mysqli_connect_errno()) { exit('Connect failed: '. mysqli_connect_erro

我需要每隔1秒不断读取数据库中的数据,以获取最新的值。这是我的密码:

    <?php
    // connect to the "tests" database
    $conn = new mysqli('localhost', 'root','','Test');

    // check connection
    if (mysqli_connect_errno()) {
     exit('Connect failed: '. mysqli_connect_error());
    }

    // SELECT sql query
   $sql = "SELECT * FROM `Value`"; 

   // perform the query and store the result
   $result = $conn->query($sql);

   if (!$result)
    print 'Error!';

   // if the $result contains at least one row
   if ($result->num_rows > 0) {
    // output data of each row from $result
     while($row = $result->fetch_assoc()) {
      $output=$row;
    print_r($output);
     }
   } 
   else {
    print '0 results';
   }

   $conn->close();
   ?>
我的HTML代码每1秒刷新一次,如下所示:

function reload (){
    setInterval(getData,1000);
}

function getData()
  {
    $.get('test.php', function(data) {

        var output = data;

        document.getElementById("output").innerHTML = "Info: " + output;
    }); 
  }
....
<body onload="reload();">

<p id="output"></p>

</body>

一切正常,但大约5-10分钟后,MYSQL服务器崩溃。我假设它超载了。我的想法是,我每次都在运行php脚本,每秒钟都在连接。我做得不对吗?有人对更好的实施有什么建议吗

您可以通过在回调中调用setTimeout,让它在最后一个请求完成后1秒才启动下一个请求,如下所示:

function getData()
  {
    $.get('test.php', function(data) {

        var output = data;

        document.getElementById("output").innerHTML = "Info: " + output;
        setTimeout(getData, 1000);
    }); 
  }
....
<body onload="getData();">
这通常是一种比使用setInterval更好的方法,因为您可能会有两个并发连接,请求a可能在请求B之前开始,但可能在请求B之后结束,因为发生了一些事情,并且完成请求花费了一秒钟以上的时间。这可能会导致一些奇怪的行为

这也可能会解决您的问题,因为它可能会失败,因为它最终会从同一IP打开多个并发连接,等等。

是的,它可以以更好的方式实现。 由于每次都使用相同的数据库连接配置,所以无需在页面刷新时连接和关闭数据库。每秒连接数据库服务器的费用非常昂贵

为什么不重新加载/刷新查询语句呢

这个想法是:

使用

参考下面的答案,了解为什么持久连接是最佳的

将查询放在单独的div-say-load中

      echo '<div id="load">';
// SELECT sql query
   $sql = "SELECT * FROM `Value`"; 

   // perform the query and store the result
   $result = $conn->query($sql);

   if (!$result)
    print 'Error!';

   // if the $result contains at least one row
   if ($result->num_rows > 0) {
    // output data of each row from $result
     while($row = $result->fetch_assoc()) {
      $output=$row;
    print_r($output);
     }
   } 
   else {
    print '0 results';
   }
       echo '</div>';
使用jquery函数只刷新load div


我已经为自动刷新排行榜页面实现了这个功能。它工作得很好,服务器甚至在50小时内都没有崩溃。

我想您正在寻找一些东西,以便在脚本结束时打开数据库

在mysqli中,可以通过添加p:来预先设置主机名,以使用所谓的持久数据库连接

// connect to the "tests" database
$conn = new mysqli('p:localhost', 'root','','Test');
在此处阅读有关持久连接的更多信息:

您的错误日志中有什么内容吗/var/log/mysql/…表值中有多少行?如果每秒连接一次,断开连接可能会影响性能,可以保持连接打开,这可能会有所帮助。这是什么操作系统?我怀疑Mysql服务器并没有真正崩溃,你看到了什么?这并不能保持Mysql连接的活力。它仍然会在每次刷新时建立新连接。最佳节目梅林瑟伍德的答案是正确的。谢谢你@Paulpro。我意识到我的错误并更新了我的答案
// connect to the "tests" database
$conn = new mysqli('p:localhost', 'root','','Test');