我希望我的PHP检查mysql数据库中的时间是否相同,如果不相同,它将被更改。
这就是我得到的:
<?php
$last_time_check=mysqli_query($con,"SELECT `time` FROM `servervars`");
if((time()-$last_time_check) >=1)
{
mysqli_query($con, 'UPDATE `servervars` SET `time`='.$time.' WHERE ID=1');
}
?>
$con是到数据库的连接
servervars中的当前值'time':1412448339
值"ID"为1
我做错了什么,但我就是找不到哪里出了问题。
修复
我删除了变量$last_time_check,只检查时间是否可以更改。如果发生这种情况,它将向客户端发送另一条消息。
mysqli_query($con, 'UPDATE `servervars` SET `time` = UNIX_TIMESTAMP() WHERE ID = 1 AND UNIX_TIMESTAMP() - `time` >= 1');
if ($con->affected_rows)
{
// at least 1 second has elapsed, do stuff
}
time()
的函数UNIX_TIMESTAMP()
。但不同的是,它可以使用DATETIME
作为参数将其转换为UNIX时间,但当不使用参数时,它与UNIX_TIMESTAMP(NOW())
相同。
UPDATE servervars SET time = UNIX_TIMESTAMP() WHERE ID = 1
更新
好的,其他问题也是如此。你做错了。mysqli_query
不直接返回该值。要从数据库中获取time
的值,需要3个步骤:
$result = $con->query('SELECT `time` FROM `servervars` WHERE ID = 1'); // fetch result set
$row = $result->fetch_row(); // fetch a row from the result set, as an array
$last = $row[0]; // get the first element from the row you just fetched
请注意,如果连接、数据库、表或查询语法本身有问题,$con->query()
可能会失败;如果查询没有结果,$result->fetch_row()
可能会失败。在继续下一步之前,您应该对它们进行验证。
或者,您可以这样做:
$con->query('UPDATE `servervars` SET `time` = UNIX_TIMESTAMP() WHERE ID = 1 AND UNIX_TIMESTAMP() - `time` >= 1');
if ($con->affected_rows)
{
// at least 1 second has elapsed, do stuff
}
通过这种方式,我们将您的解决方案缩短为一个查询,该查询在必要时更新字段并报告是否发生。。