Php 其他未缓冲查询处于活动状态时,`的不同解决方案无法执行查询`

Php 其他未缓冲查询处于活动状态时,`的不同解决方案无法执行查询`,php,mysql,pdo,mariadb,Php,Mysql,Pdo,Mariadb,我刚刚从MySQL迁移到较新的MariaDB,我的所有网站现在都显示: 当其他未缓冲查询处于活动状态时,无法执行查询。 考虑使用pdoCalp::FutAccess()。或者,如果您的代码 只在mysql上运行,您可以启用查询 通过设置PDO::MYSQL\u ATTR\u USE\u BUFFERED\u QUERY属性进行缓冲 我在谷歌上搜索了这个错误,并尝试按照人们的建议去做 因此,我将代码改为使用PDO的closeCursor()。 我尝试使用PDO::MYSQL\u ATTR\u US

我刚刚从MySQL迁移到较新的MariaDB,我的所有网站现在都显示:

当其他未缓冲查询处于活动状态时,无法执行查询。 考虑使用pdoCalp::FutAccess()。或者,如果您的代码 只在mysql上运行,您可以启用查询 通过设置PDO::MYSQL\u ATTR\u USE\u BUFFERED\u QUERY属性进行缓冲

我在谷歌上搜索了这个错误,并尝试按照人们的建议去做

因此,我将代码改为使用PDO的
closeCursor()

我尝试使用
PDO::MYSQL\u ATTR\u USE\u BUFFERED\u QUERY
,但没有任何效果。

下面是我的构造函数的外观:

$pdo = new PDO('mysql:host=' . $host . ';dbname=' . $db . ';port=' . $port, $user, $pass, 
                array(
                  PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8;SET SESSION time_zone="system"', 
                  PDO::MYSQL_ATTR_LOCAL_INFILE => true
                ));
我把它改成了

$pdo = new PDO('mysql:host=' . $host . ';dbname=' . $db . ';port=' . $port, $user, $pass, 
                array(
                  PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8, SESSION time_zone="system"',     
                  PDO::MYSQL_ATTR_LOCAL_INFILE => true
                ));
现在它确实起作用了

我在这里发布我的解决方案,因为所有其他地方都有“错误”的解决方案

因此,区别在于

'SET NAMES utf8;SET SESSION time_zone="system"'
PDO::MYSQL\u ATTR\u INIT\u命令中
我有:

'SET NAMES utf8, SESSION time_zone="system"'

现在一切都好了。

实际上,您应该将utf8放入DSN的字符集部分。而且使用PDO::MYSQL_ATTR_INIT_命令也没有意义,因为您可以只使用常规查询()发送任意数量的命令method@YourCommonSense在PHP 5.3.6之前,DSN中的字符集被忽略,因此上述解决方案甚至适用于较旧的PHP。使用MYSQL\u ATTR\u INIT\u命令而不是query()只是我的选择,我不明白为什么会被否决。我在使用MySQL时遇到了同样的问题,原因和解决方案都是一样的。