很抱歉这篇文章有很多答案,但我正在旋转我的轮子,没有想法。非常简单:删除所有超过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
字段。
这不会抛出任何错误,但也不会删除任何内容。我尝试过很多不同的东西,其中大多数都比我在这里发布的更优雅,但都不起作用。有人能帮我吗?非常感谢。
您不需要在PHP中创建时间。MySQL能够自己进行时间计算。
DELETE from Session_Keys
WHERE updated_at < NOW() - INTERVAL 1 MINUTE
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;
}
它使用预先准备好的语句,这是一种最佳实践。