【问题标题】:Dynamically Create MySQL Event动态创建 MySQL 事件
【发布时间】:2021-06-19 18:25:45
【问题描述】:

我的网站允许用户创建事件,我需要在事件发生后从 MySQL 数据库中删除这些事件。因此,当用户创建他们的事件时,我试图在数据库中安排一个事件,该事件会在用户为其提供的时间后不久删除用户的事件信息。

例如,我希望该活动与这里的其他活动一样:

这是我尝试过的一种尝试:

$stmtstr = "
        CREATE EVENT event_" . $roomID . "_" . $current_time . "_DELETEPRAYER
        ON SCHEDULE AT '" . $timeToDeletePrayerFormatted . "'
        DO
        DELETE FROM prayer_rooms WHERE roomID = $roomID
        ";
$stmt3 = $conn->prepare(strval($stmtstr));

$roomID、$current_time 和 $timeToDeletePrayerFormatted 都是有效值。即便如此,prepare() 在这里返回一个布尔值,表明 MySQL 语句有问题。我手动运行该语句,使用与此处进入 prepare() 完全相同的字符串,它成功运行且没有错误。

我也尝试过使用 ?s 和 bind_param() 但没有成功。

对哪些类型的 MySQL 语句可以是动态的有简单的限制吗?有什么方法可以根据用户提供的时间在数据库中创建一个预定的事件发生?

【问题讨论】:

  • 请注意,以这种方式“硬删除”数据确实很不寻常
  • 请贴出完整的错误信息,如果所有变量都设置好了,应该这样,但是有很多事情会导致错误
  • 除非您禁用了 mysqli 错误报告,否则您的准备调用不应返回 false。阅读How to get the error message in MySQLi?
  • 在 MySql 存储的代码中设置分隔符有一个完整的错误。 (事件是存储代码,以及触发器、存储函数和存储过程。)我在您的示例代码中没有看到任何这些,因此您可能必须在您的东西工作之前对其进行补救。阅读此stackoverflow.com/questions/10259504/delimiters-in-mysql
  • 不要这样做。将到期时间与其他事件数据一起存储在表中。创建一个每隔几分钟运行一次的 MySQL 事件,以删除所有过期事件。无需即时创建事件。

标签: php mysql sql prepared-statement mysql-event


【解决方案1】:

根据 Tangentially Perpendicular 的评论,我将每个事件的所有到期时间都存储在各自的表中,并创建了一个 MySQL 事件,该事件每隔几分钟运行一次,并根据到期时间删除这些事件。非常感谢您的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 2018-09-20
    相关资源
    最近更新 更多