标题: 用Pdo_Mysql执行存储过程,出现SQLSTATE[HY000]: General error: 2014错误
subnet
新手上路
Rank: 1



UID 1015
精华 0
积分 0
帖子 4
翻译 0
原创 0
阅读权限 10
注册 2008-4-15
状态 离线
发表于 2008-4-15 22:26  资料  短消息  加为好友 
用Pdo_Mysql执行存储过程,出现SQLSTATE[HY000]: General error: 2014错误

只要是先执行存储过程,执行是成功正确的,但执行完之后所有的数据库操作全部会出错,似乎是资源之类没释放.

我以前有个项目可以用mysqli,也遇到过类似问题,结果是在存储过程执行完后用mysqli_next_result()解决的.

我对底层不是很熟,顺着这个函数尝试过pdo的nextRowset() closeCursor()但都没解决.

请诸位帮帮我,多谢,现在这个项目涉及多种数据库且只能用PDO.

ZF返回的错误提示是:'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.'

我也试过设置在PDO执行前设置MYSQL_ATTR_USE_BUFFERED_QUERY这个属性但仍然无效.

我还在zf上找到了这个,和我的情况一样,但上面写:Fix Version/s: 1.5.0 ,应该在1.5里面解决了,我用的是1.5.1:
Can't execute multiple stored procedures with Pdo_Mysql
http://framework.zend.com/issues/browse/ZF-2101

哎,小弟愚钝,实在试过N次没办法了...

顶部
subnet
新手上路
Rank: 1



UID 1015
精华 0
积分 0
帖子 4
翻译 0
原创 0
阅读权限 10
注册 2008-4-15
状态 离线
发表于 2008-4-15 23:25  资料  短消息  加为好友 
$dao   = Zend_Db::factory($adapter, $params->toArray());
$conn = $dao->getConnection();
$conn->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
$dao->query('SET NAMES utf8');
Zend_Db_Table::setDefaultAdapter($dao);

// 执行成功:
$stmt = $dao->prepare('CALL test();');
$stmt->execute($args);
$result = $stmt->fetchAll();

// 执行失败,拿掉上面存储过程那块就成功
$dao->insert($tblName, $result);
....

顶部
Cykit
新手上路
Rank: 1



UID 729
精华 0
积分 0
帖子 15
翻译 0
原创 0
阅读权限 10
注册 2008-1-14
状态 离线
发表于 2008-4-19 23:51  资料  短消息  加为好友 
我在Windows下也是这样,在Linux下不会。所以就不理它了,反正不会用Windows来做服务器!

顶部
 


PHPEye社区--LAMP开源技术社区


当前时区 GMT+8, 现在时间是 2008-7-21 02:22

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

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