PHP常量SQL查询
我需要每隔1秒不断读取数据库中的数据,以获取最新的值。这是我的密码: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
<?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');