这是我的代码:
$query = "CALL user_top_categories_score(?, 'ALL', 0, 1)"; $sth = $this->dbh->prepare($query); $sth->execute([$user_id]); $category = $sth->fetchAll(PDO::FETCH_ASSOC); $query = "CALL user_top_tags_score(?, 'ALL', 0, 3)"; $sth = $this->dbh->prepare($query); $sth->execute([$user_id]); $tags = $sth->fetchAll(PDO::FETCH_ASSOC);
它引发此错误:
致命错误:未被捕获的PDOException:SQLSTATE [HY000]:常规错误:2014当其他未缓冲的查询处于活动状态时,无法执行查询。考虑使用PDOStatement :: fetchAll()。另外,如果您的代码只打算针对mysql运行,则可以通过设置PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性来启用查询缓冲。在C:\ xampp \ htdocs \ myweb \ others \ user.php:71中堆栈跟踪:#0 C:\ xampp \ htdocs \ myweb \ others \ user.php(71):PDO-> prepare(’CALL user_top_t。 。’)#1 C:\ xampp \ htdocs \ myweb \ application \ other.php(24):用户->索引()#2 C:\ xampp \ htdocs \ myweb \ index.php(152):require_once(’ C:\ xampp \ htdocs …’)#3 {main}在第71行的C:\ xampp \ htdocs \ myweb \ others \ user.php中
此外,我用过closeCursor()之后fetchAll(),基于该解决方案。但是可悲的是它引发了一个新的错误:
closeCursor()
fetchAll()
警告:数据包乱序。预期收到1个。9,第72行的C:\ xampp \ htdocs \ myweb \ others \ user.php中的数据包大小= 7 警告:PDO :: prepare():第72行的C:\ xampp \ htdocs \ myweb \ others \ user.php中,MySQL服务器已消失 致命错误:未捕获的PDOException:SQLSTATE [HY000]:常规错误:2006 MySQL服务器在C:\ xampp \ htdocs \ myweb \ others \ user.php:72中消失了:堆栈跟踪:#0 C:\ xampp \ htdocs \ myweb \ others \ user.php(72):PDO-> prepare(’CALL user_top_t …’)#1 C:\ xampp \ htdocs \ myweb \ application \ other.php(24):user-> index()# 2 C:\ xampp \ htdocs \ myweb \ index.php(152):require_once(’C:\ xampp \ htdocs …’)#3 {main}抛出C:\ xampp \ htdocs \ myweb \ others \ user .php行72
警告:数据包乱序。预期收到1个。9,第72行的C:\ xampp \ htdocs \ myweb \ others \ user.php中的数据包大小= 7
警告:PDO :: prepare():第72行的C:\ xampp \ htdocs \ myweb \ others \ user.php中,MySQL服务器已消失
致命错误:未捕获的PDOException:SQLSTATE [HY000]:常规错误:2006 MySQL服务器在C:\ xampp \ htdocs \ myweb \ others \ user.php:72中消失了:堆栈跟踪:#0 C:\ xampp \ htdocs \ myweb \ others \ user.php(72):PDO-> prepare(’CALL user_top_t …’)#1 C:\ xampp \ htdocs \ myweb \ application \ other.php(24):user-> index()# 2 C:\ xampp \ htdocs \ myweb \ index.php(152):require_once(’C:\ xampp \ htdocs …’)#3 {main}抛出C:\ xampp \ htdocs \ myweb \ others \ user .php行72
知道如何解决该问题吗?
注意1: 上面的每个查询都是单独工作的。我的意思是,当我调用单个过程时,它也可以正常工作。
注2: 每个过程都返回一个结果集。我的意思是SELECT这些程序中有一个陈述。
SELECT
您的过程中可能只有一个SELECT,但是API不知道这一点。它必须假设您 可能 从过程中返回了多个结果集,因此仅fetchAll()不会关闭游标。
您必须继续调用,nextRowset()直到它返回错误的结果为止,这表明所有结果均已从该语句返回。
nextRowset()