0

$PDO->query('SET NAMES utf8;');在我的连接库代码中引入了一些 Unicode 合规性。这适用于某些主机,在这些主机上,我可以使用.execute().

但是,在某些托管计划中,我遇到了这个错误:

一般错误:2014 在其他无缓冲查询处于活动状态时无法执行查询。考虑使用 PDOStatement::fetchAll()。或者,如果您的代码只针对 mysql 运行,您可以通过设置 PDO::MYSQL_ATTR_USE_BUFFERED_QUERY 属性来启用查询缓冲。

所以,在 SET NAMES 之前,我介绍了$PDO->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, TRUE);,但我仍然收到错误消息。然后我将该值设置为 FALSE,但我仍然收到错误消息。

当然,如果我删除该"SET NAMES utf8"语句,问题就会消失。再说一次——这个问题只发生在一些网络主机上。

将 MySQL 切换到适用于大多数 Linux 托管计划的 Unicode 的正确方法是什么?

4

1 回答 1

2

将连接编码设置为 UTF-8 的首选方法是PDO::MYSQL_ATTR_INIT_COMMAND在 PDO 构造函数中使用 ,如手册中所示:

$dsn      = 'mysql:host=localhost;dbname=testdb';
$username = 'username';
$password = 'password';
$options  = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 

$dbh = new PDO($dsn, $username, $password, $options);

这应该始终有效。

于 2012-04-16T01:52:19.130 回答