PHP와 함께 MySQL을 사용하고 있습니다. Codeigniter. 게시물에 bluefeet이 대답 한 질문이 있습니다. hereMySQL 오류 - 동기화되지 않은 명령입니다.
bluefeet로 두 번째 해결 방법에 대한 저장 프로 시저를 만들었습니다. 그러나 프로덕션 환경에서 프로 시저를 호출하는 동안 완벽하게 작동하지만 다른 모든 사용자는 오류를받습니다.
명령이 동기화되지 않았습니다. 이 명령을 지금 실행할 수 없습니다.
어떻게이 오류를 극복 할 수 있습니까? 그러나 프로 시저가 호출 된 후에 연결을 닫으려고 시도했지만 다른 사용자의 쿼리는 연결이 닫히기 전에 실행됩니다. 이 문제의 해결 방법은 무엇입니까?
다음은 내가DROP PROCEDURE IF EXISTS mailbox.circle_pending_p;
CREATE PROCEDURE mailbox.`circle_pending_p`()
BEGIN
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'sum(CASE WHEN maildate = ''',
date_format(mailtime, '%e-%b'),
''' THEN 1 else 0 END) AS `',
date_format(mailtime, '%e-%b'), '`'
)
) INTO @sql
FROM circle_pending_temp
WHERE mailtime >= (select date_sub(max(mailtime), interval 8 DAY)
from circle_pending_temp);
SET @sql
= CONCAT('SELECT coalesce(email_Circle, ''Grand Total'') Circle,
max(`< 9 days`) `< 9 days`, ', @sql, ' ,
count(*) GrandTotal
from
(
select c.email_Circle,
date_format(c.mailtime, ''%e-%b'') maildate,
coalesce(o.`< 9 days`, 0) `< 9 days`
from circle_pending_temp c
left join
(
select email_Circle,
count(*) `< 9 days`
from circle_pending_temp
where mailtime <= (select date_sub(max(mailtime), interval 8 DAY)
from circle_pending_temp)
) o
on c.email_Circle = o.email_Circle
where c.mailtime >= (select date_sub(max(mailtime), interval 8 DAY)
from circle_pending_temp)
) d
group by email_Circle with rollup ');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;
내가이 프로 시저를 호출에 사용하는 PHP 사용한 저장 프로 시저입니다
$db = $this->load->database('mailbox',TRUE);
$res = $db->query('Call circle_pending_p()');
echo $db->_error_message();
$db->close();
$db = $this->load->database('mailbox',TRUE);
if ($res->num_rows() > 0) {
return $res->result_array();
} else {
return 0;
}
mysqli를 사용한다면, 그냥 호출 할 수있다. mysqli_next_result ($ this-> db-> conn_id); mysqli 라이브러리를 수정하는 대신 모델 자체에서 프로 시저를 호출 한 후 – idok