РЕШИТЬ
У меня есть этот блок кодов, который будет вставлять данные во все уникальные email_address, доступные в таблице emp_leave_balance. Проблема в том, что он не работает, хотя он не поймал ошибку. Я пробовал этот код в 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 = "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";
Очень немногие (если есть) функции в исключениях CI бросают, если они это делают, это обычно происходит из-за собственной php-функции. В вашем случае query()
будет возвращать значение boolean в зависимости от того, удалось ли ему это сделать, чтобы блок catch try был лишним.
С учетом сказанного, вся функция query()
выполняет запрос, поэтому я не вижу, если проблема с обработкой чего-либо, что не может сделать phpmyadmin. Я бы предложил перейти в файл database.php
и изменить db_debug
на true. Это поможет вам найти точную причину ошибки.