我花了4个小时尝试将一个简单的插入日期时间写入数据库,重新读取该值并查看已经过了多长时间。我在PHP中看到了一个可怕的例子(我的ISP只有PHP 5.2.1)而不是5.3。好吧,经过几个小时的阅读......我找到了一个让我开心的解决方案,但我不知道如何让它按照我需要的方式工作...代码是......
create temporary table Data
( dt DateTime );
insert Data values
(now() - INTERVAL 23 MINUTE);
select
TIME_FORMAT(
TIMEDIFF(now(), dt)
,'%i minute(s) ago'
)
from Data;
我正在使用PREPARED语句(PS)...我不知道如何将其转换为程序样式,PS。我在想而不是?我会把now()但是我不知道该放入什么值。我还想...我只是将数据库更改为INT,然后将PHP时间()值粘贴在那里,并在读取它时对其进行一些数学运算。这是我的另一种选择,但是...这将使SQL做“工作”所以......这可以转换为PS吗?
谢谢!
我想做的就是......
使用now更新记录()然后找出自我写完该记录以来已经过了多长时间,如果已经过了足够的时间就将其删除。
显示上述代码的网站是......
答案 0 :(得分:0)
整整一天都在苦苦思索这一切,看起来我做到了。奇怪的是SQL实际上非常简单,PHP非常简单。我老了,我的大脑生锈了(已经编程了17年以上)。我想象它应该如何在我的头脑中工作,并且需要几秒钟的时间来研究和弄清楚。所以......我找到了解决方案......
$query = "SELECT TIMESTAMPDIFF(MINUTE, `sesstoken1created`,now()) FROM pcssecurity";
除了我必须将其更改为DELETE语句所以我在想......
$query = "DELETE FROM pcssecurity WHERE TIMESTAMPDIFF(MINUTE, `sesstoken1created`,now()) > 16";
这将删除找到的所有时间戳> 16分钟。作品。我还在研究如果没有变量可以绑定怎么做..是否可以不包含BIND变量......并且显然它没有绑定变量。
<强>解强>
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_USER_PASSWORD, DB_NAME) or die(DB_CONNECT_ERROR . __LINE__);
$stmt = mysqli_stmt_init($dbc);
$query = "DELETE FROM tablename WHERE TIMESTAMPDIFF(MINUTE, `datetimefieldhere`,now()) > " . SESSION_TOKEN_EXPIRES_IN_MINUTES;
$result = mysqli_stmt_prepare($stmt, $query);
$result = mysqli_stmt_execute($stmt);
$result = mysqli_stmt_affected_rows($stmt);
if ($result === -1) { // some error happened
die('CreateNewToken insert failed');
}