query('SET NAMES utf8;'); 以获得一些 Unicode 合规性。这适用于某些主机,我可以使用 .execute() 通过 INSERT 执行-6ren">
gpt4 book ai didi

php - 一些主机不喜欢设置名称 utf8 -- "Cannot execute queries while other unbuffered queries are active."

转载 作者:行者123 更新时间:2023-11-29 08:55:00 25 4
gpt4 key购买 nike

我在连接库代码中引入了 $PDO->query('SET NAMES utf8;'); 以获得一些 Unicode 合规性。这适用于某些主机,我可以使用 .execute() 通过 INSERT 执行 PDO 语句。

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

General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

因此,在 SET NAMES 之前,我引入了 $PDO->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, TRUE);,但我仍然收到错误。然后我将该值设置为 FALSE,但仍然收到错误。

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

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

最佳答案

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

$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);

这应该总是有效。

关于php - 一些主机不喜欢设置名称 utf8 -- "Cannot execute queries while other unbuffered queries are active.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10167773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com