不同的解决方案,而其他非缓冲查询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"'
,现在一切都很好。
实际上,你应该把utf8放入DSN的charset部分。并且使用PDO :: MYSQL_ATTR_INIT_COMMAND也没有意义,因为您可以使用常规查询()方法发送任意数量的命令 –
@YourCommonSense在PHP 5.3.6之前,DSN中的charset被忽略,所以上述解决方案甚至可以工作旧的PHP。而使用MYSQL_ATTR_INIT_COMMAND而不是query()只是我的选择。 – Tom