php – MySQL错误 – 命令不同步;你现在不能运行这个命令
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – MySQL错误 – 命令不同步;你现在不能运行这个命令,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2420字,纯文字阅读大概需要4分钟。
内容图文
我正在使用MySQL和PHP,Codeigniter.我有一个问题,在here之后由bluefeet回答
我为bluefeet创建了第二个解决方案的存储过程.然而,它工作得很完美,而在生产环境中调用该过程时,所有其他用户都会收到错误
Commands out of sync; you can’t run this command now
不知道我怎么能克服这个错误.我还尝试在调用过程后关闭连接,但是,在关闭连接之前,将执行来自其他用户的查询.解决这个问题的任何解决办法?
下面是我使用的存储过程
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;
}
解决方法:
得到了答案!似乎codeigniter的mysql驱动程序有处理存储过程的错误.
我通过更改在配置/数据库文件中将驱动程序从mysql更改为mysqli
$db['default']['dbdriver'] = 'mysql';
至
$db['default']['dbdriver'] = 'mysqli';
发布我修改了system / database / drivers / mysqli / mysqli_result.php文件并添加了以下功能
function next_result()
{
if (is_object($this->conn_id))
{
return mysqli_next_result($this->conn_id);
}
}
并修改了如下模型
$db = $this->load->database('mailbox',TRUE);
$qry_res = $db->query('Call circle_pending_p()');
echo $db->_error_message();
$res = $qry_res->result_array();
$qry_res->next_result();
$qry_res->free_result();
if (count($res) > 0) {
return $res;
} else {
return 0;
}
这解决了这个问题!
内容总结
以上是互联网集市为您收集整理的php – MySQL错误 – 命令不同步;你现在不能运行这个命令全部内容,希望文章能够帮你解决php – MySQL错误 – 命令不同步;你现在不能运行这个命令所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。