PHP MySQL删除超过1分钟的行


PHP MySQL Delete Rows older than 1 minute

很抱歉这篇文章有很多答案,但我正在旋转我的轮子,没有想法。非常简单:删除所有超过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;
}

它使用预先准备好的语句,这是一种最佳实践。