如何在 codeigniter 模型中使用 mysql 事件调度程序
Posted
技术标签:
【中文标题】如何在 codeigniter 模型中使用 mysql 事件调度程序【英文标题】:How to use mysql event scheduler in codeigniter model 【发布时间】:2018-09-18 09:34:30 【问题描述】:已解决
我有这个代码块,可以将数据插入到 emp_leave_balance 表上所有可用的唯一 email_address 中。问题是即使它没有捕获错误它也不起作用。我在 cmd 中尝试了这段代码,它运行良好。我不确定codeigniter是否接受这种查询。
型号
public function insert_credit_points_data($email)
try
$sql = "DELIMITER $$
CREATE EVENT ecp
ON SCHEDULE EVERY 1 MINUTE STARTS NOW() DO
BEGIN
INSERT INTO emp_leave_balance (balance, date_from, date_to, leave_type, earned, date_filed, action_taken,email_address)
SELECT (1.25+balance), NOW(), DATE_ADD(NOW(),INTERVAL 1 MINUTE), 'Vacation', 1.25, NOW(), 'CREDITED',".$email." FROM emp_leave_balance where email_address = ".$email." ORDER BY balance DESC LIMIT 1;
END$$
DELIMITER ;";
$this->db->query($sql);
catch(Exception $e)
throw $e;
SQL ERROR
新问题
我正在尝试根据表中可用的不同电子邮件地址的数量循环插入查询。问题是我的循环不起作用。
$sql = "CREATE EVENT ecp ON SCHEDULE EVERY 1 MINUTE STARTS NOW() DO
BEGIN
DECLARE x INT DEFAULT 0;
DECLARE counter INT DEFAULT (SELECT COUNT(DISTINCT(email_address)) FROM emp_leave_balance);
simple_loop: LOOP
INSERT INTO emp_leave_balance (balance, date_from, date_to, leave_type, earned, date_filed, action_taken,email_address)
SELECT (1.25+balance), NOW(), DATE_ADD(NOW(),INTERVAL 1 MINUTE), 'Vacation', 1.25, NOW(), 'CREDITED','".$email."' FROM emp_leave_balance where email_address = '".$email."' ORDER BY balance DESC LIMIT 1;
SET x = x + 1;
IF x<counter THEN
LEAVE simple_loop;
END IF;
END LOOP simple_loop;
END";
【问题讨论】:
【参考方案1】:CI 中很少(如果有的话)函数抛出异常,如果它们这样做通常是由于原生 php 函数。在您的情况下,query()
将返回布尔值,具体取决于它是否成功,因此 try catch 块是多余的。
话虽如此,query()
函数所做的只是执行一个查询,所以我看不出处理任何 phpmyadmin 无法处理的问题是否有问题。我建议进入database.php
文件并将db_debug
更改为true。这应该可以帮助您找到错误的确切原因。
【讨论】:
谢谢你。我得到了错误,但我仍然不知道如何解决它。你能帮我解决一下吗。我将在我的帖子中添加错误 我遇到了一个新问题。我试图在我的查询中创建一个循环,但我的循环不起作用?知道如何根据表中可用的不同电子邮件地址的数量来实现循环吗? 我真的不太擅长高级 sql 的东西......对不起。 但是您不应该编辑您的问题 - 而是使用适当的标签开始一个新问题以上是关于如何在 codeigniter 模型中使用 mysql 事件调度程序的主要内容,如果未能解决你的问题,请参考以下文章
如何获取 Codeigniter 中模型之间事务中关系的最后一个 ID?