如何在 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?

如何在 Codeigniter 模型中编写此查询?

如何在codeigniter中使用存储过程的结果集

PHP 如何在CodeIgniter中编写更好的模型

如何将结果从模型传递到 CodeIgniter 中的控制器?

我如何在 codeigniter 模型中编写简单的 mysql 查询