不同的解决方案,而其他非缓冲查询active`

不同的解决方案,而其他非缓冲查询active`

问题描述:

我刚刚从MySQL迁移到新的MariaDB的和我所有的网站'无法执行查询现在显示:不同的解决方案,而其他非缓冲查询active`

不能执行查询,而其他非缓冲查询是活跃的。 考虑使用PDostatement :: fetchAll()。另外,如果你的代码 只曾经打算对MySQL的运行,你可以通过设置PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性启用查询 缓冲。

我GOOGLE了这个错误,并试图做的人建议什么。

所以我改变了我的代码中使用PDO的closeCursor()。 我尝试使用PDO::MYSQL_ATTR_USE_BUFFERED_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_ATTR_INIT_COMMAND

我有:

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

,现在一切都很好。

+2

实际上,你应该把utf8放入DSN的charset部分。并且使用PDO :: MYSQL_ATTR_INIT_COMMAND也没有意义,因为您可以使用常规查询()方法发送任意数量的命令 –

+0

@YourCommonSense在PHP 5.3.6之前,DSN中的charset被忽略,所以上述解决方案甚至可以工作旧的PHP。而使用MYSQL_ATTR_INIT_COMMAND而不是query()只是我的选择。 – Tom