如何检索由 MySQL 事件插入的记录的 id

Posted

技术标签:

【中文标题】如何检索由 MySQL 事件插入的记录的 id【英文标题】:how to retrieve id of record that is inserted by MySQL event 【发布时间】:2015-06-18 18:22:19 【问题描述】:

以下是我的代码:

$schedule = $this->db->query("CREATE EVENT ".$data['id']." ON SCHEDULE 
EVERY 1 MONTH ON COMPLETION PRESERVE ENABLE DO INSERT INTO oops_invoice 
(id, prefix, number, bill, account_id, order_delivery_id, date, staff_id, 
customer_note, recurrence, status, itp, utp) VALUES ('', '".$data['prefix']."', 
'".$data['number']."', '".$data['bill']."', '".$data['account_id']."', NULL, 
'".$data['date']."', NULL, '".$data['customer_note']."', '".$data['recurrence']."', 
'Draft', '".$data['itp']."', CURRENT_TIMESTAMP)");

$this->db->query("SET GLOBAL event_scheduler =  'ON'");

我坚持使用 id 来检索 mysql 事件插入的 id od 行。

我已经尝试过,但当表为空时不起作用...

以下代码工作正常,除了表为空的一种情况......当时它什么也不返回,所以我被卡住了......

这一项与我们插入简单数据不同,这一项使用 MySQL 事件插入,所以 $this->db->insert_id(); 不起作用......

$last = $this->db->query('SELECT MAX(id) AS `maxid` FROM `oops_invoice`')->row()->maxid;

【问题讨论】:

不要关注不是问题的三元运算符 好吧,描述一下这个问题。 “不起作用”有点不具体。 是mysql还是mysqli??还是pdo??? 如果表为空,为什么需要插入行的ID? @SagarNaliyapara:插入发生在event 正在执行但不是在事件创建时。您还可以为event 包含starts 子句。示例:ON SCHEDULE EVERY 1 MONTH STARTS DATE_FORMAT(NOW(),'%Y-%m-%d %H:55:00') 【参考方案1】:

不需要检索 id, 您可以像这样在创建活动的 1 或 2 分钟之前开始活动... 它将消除表中的 2 次插入。

CREATE EVENT ".$data['id']." ON SCHEDULE EVERY 1 MONTH STARTS DATE_SUB(NOW(),INTERVAL '0:01' HOUR_MINUTE) ON COMPLETION PRESERVE ENABLE DO INSERT INTO oops_invoice (id, prefix, number, bill, account_id, order_delivery_id, date, staff_id, customer_note, recurrence, status, itp, utp) VALUES ('', '".$data['prefix']."', '".$data['number']."', '".$data['bill']."', '".$data['account_id']."', NULL, '".$data['date']."', NULL, '".$data['customer_note']."', '".$data['recurrence']."', 'Draft', '".$data['itp']."', CURRENT_TIMESTAMP)");
    $this->db->query("SET GLOBAL event_scheduler =  'ON'");

【讨论】:

【参考方案2】:
$this->db->lastInsertId()

一定是你的解决方案

【讨论】:

您不尝试获取数据库中创建事件的最后一个 id 吗?

以上是关于如何检索由 MySQL 事件插入的记录的 id的主要内容,如果未能解决你的问题,请参考以下文章

从 user_pseudo_id 检索 firebaseUID

php检索插入的最后一条记录的ID并将其插入另一个表中

如何使用 ODBC 驱动程序仅从 MS Access 向 MySql 自动插入新记录?

如何在 MySQL 上使用 Hibernate 批量插入递增的 ID?

如何使用插入的 ID 在同一个 MySQL 表中复制记录

检索由具有 FQL 的组主持的事件