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"ステートメントを削除すると、問題はなくなります。繰り返しになりますが、この問題は一部の Web ホストでのみ発生します。

ほとんどの Linux ホスティング プランで動作する MySQL を 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 に答える