今天碰到的一个问题,解决了但还不是太明白,哪位
程序在我本机上没有问题,可是换了台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);
然后刷新页面发现就正常了
虽然问题解决了,但是还是稀里糊涂的,应该是对原理理解的不够透彻吧,不知道这样改有没有其他副作用
|