MySqli Prepared Statements使用now()插入,并根据时间通过删除

时间:2012-01-28 08:38:00

标签: php datetime mysqli prepared-statement

我花了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更新记录()然后找出自我写完该记录以来已经过了多长时间,如果已经过了足够的时间就将其删除。

显示上述代码的网站是......

http://sqlize.com/r1mlXcM62V

1 个答案:

答案 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');
}