如何在codeigniter模型中使用mysql事件调度器

9avjhtql  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(350)

解决了的
我有这个代码块,将插入数据到所有唯一的电子邮件地址可用的emp\ U离开\ U平衡表。问题是即使它没有捕捉到错误,它也不能工作。我在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错误
新问题
我正在尝试根据表中可用的不同电子邮件地址数循环insert查询。问题是我的循环不起作用。

$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";
qf9go6mv

qf9go6mv1#

ci中很少(如果有的话)函数抛出异常,如果抛出异常,通常是由于本机php函数引起的。对你来说 query() 将根据是否成功返回布尔值,因此try-catch块是多余的。
话说回来 query() 函数的作用是执行一个查询,这样我就看不出在处理phpmyadmin不能处理的任何内容时是否有问题。我建议你去 database.php 文件和更改 db_debug 是真的。这将帮助您找到错误的确切原因。

相关问题