很抱歉这篇帖子有很多答案,但我正在转动我的想法。非常简单:删除超过1分钟的所有记录:
function deleteExpiredKeys ($link) {
$date = date("Y-m-d H:i:s");
$time = strtotime($date);
$time = $time - (60);
$date = date("Y-m-d H:i:s", $time);
$sql = 'DELETE from Session_Keys
WHERE updated_at < ' . $date;
$result = mysqli_query($link, $sql);
if (!$result) return false;
return true;
}
'updated_at'是datetime
字段。
这不会抛出任何错误,但它也不会删除任何错误。我尝试了很多不同的东西,其中大多数都比我在这里发布的更优雅,但没有任何效果。谁能帮我?谢谢。
答案 0 :(得分:1)
您无需在PHP中创建时间。 MySQL能够自己进行时间计算。
DELETE from Session_Keys
WHERE updated_at < NOW() - INTERVAL 1 MINUTE
答案 1 :(得分:0)
在与日期/日期时间进行比较时,MySQL会默默地将格式正确的字符串转换为日期。您的代码不会将日期作为字符串发送,而是作为一系列字符发送(字符串需要用引号分隔)。
试试这个:
function deleteExpiredKeys ($link) {
$date = date("Y-m-d H:i:s", strtotime('1 minute ago'));
$sql = 'DELETE from Session_Keys
WHERE updated_at < ?';
$stmt = mysqli_prepare($link, $sql);
mysqli_stmt_bind_param($stmt, 's', $date);
$result = mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
if (!$result) return false;
return true;
}
它使用了红外线声明,这是最佳做法。