标题: 今天碰到的一个问题,解决了但还不是太明白,哪位
sxpo
新手上路
Rank: 1



UID 47
精华 0
积分 0
帖子 24
翻译 0
原创 0
阅读权限 10
注册 2007-5-29
状态 离线
发表于 2007-8-16 14:28  资料  短消息  加为好友 
今天碰到的一个问题,解决了但还不是太明白,哪位

程序在我本机上没有问题,可是换了台linux主机就报下面的错误:

"SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active.  Consider using PDOStatement::fetchAll().  Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute."

我先去看看了看程序,在那段程序里面确实用了多个$db->query($sql) $db是个pdo_mysql对象
看起来应该是由于没有设置查询缓存导致第二个查询失败
然后我就去查手册,看上面PDO有个属性是MYSQL_ATTR_USE_BUFFERED_QUERY
然后写了段代码看我本机上MYSQL_ATTR_USE_BUFFERED_QUERY 为1
而那台linux主机上MYSQL_ATTR_USE_BUFFERED_QUERY 为 0
初步判断是那个的问题 在google搜出来的都看不懂,就还是看程序
看zf创建PDO对象是在Zend_Db_Adapter_Pdo_Abstract 里面,看了他和他的父类子类没发现可以传入MYSQL_ATTR_USE_BUFFERED_QUERY 参数的地方,就在124行下面加了行:
$this->_connection->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);
然后刷新页面发现就正常了

虽然问题解决了,但是还是稀里糊涂的,应该是对原理理解的不够透彻吧,不知道这样改有没有其他副作用

顶部
wps2000
新手上路
Rank: 1



UID 34
精华 0
积分 0
帖子 73
翻译 0
原创 0
阅读权限 10
注册 2007-5-20
状态 离线
发表于 2007-8-16 16:12  资料  短消息  加为好友 
没有
最方便的办法是,永远都 fetchAll()
呵呵,那就不会出这种问题啦





顶部
Haohappy
超级版主
Rank: 8Rank: 8
PHPEye站长


UID 2
精华 11
积分 110
帖子 285
翻译 6
原创 1
阅读权限 150
注册 2007-5-2
状态 离线
发表于 2007-8-16 18:14  资料  短消息  加为好友  添加 haohappy 为MSN好友 通过MSN和 haohappy 交谈
手册里有:
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY  (integer)

    If this attribute is set to TRUE on a PDOStatement, the MySQL driver will use the buffered versions of the MySQL API. If you're writing portable code, you should use PDOStatement::fetchAll() instead.





互助共享,共同成长。
顶部
 


PHPEye开源社区


当前时区 GMT+8, 现在时间是 2009-1-9 11:11

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.024966 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - PHPEye开源社区 - Archiver