8

php.net、Stack Overflow、その他の信頼の情報源によると、PDO接続でUTF-8を設定する4つの異なる方法を見つけることができますが、どちらを選択するのが良いかを見つけることができません。

$pdo_db = 'mysql:host=localhost;dbname=local_db;charset=utf8'; // METHOD #1
$pdo_login = 'root';
$pdo_pass = 'localpass';

$db = new PDO($pdo_db, $pdo_login, $pdo_pass, array(
    PDO::ATTR_ERRMODE => $localhost ? PDO::ERRMODE_EXCEPTION : PDO::ERRMODE_SILENT,
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', // METHOD #2
));
$db->exec('SET NAMES utf8'); // METHOD #3
$db->exec('SET CHARACTER SET utf8'); // METHOD #4

つまり、私が理解したのは、メソッド1はPHP 5.3以降でのみ機能し(ただし、少しバグがあるようです)、メソッド2はMySQL専用であるということです。方法3と4の違いはMySQLのことですが、どちらが優れているかはまだわかりません。また、PDO属性でSET NAMESを呼び出す方法はありますが、MySQLのみではありませんか?

4

2 に答える 2

6

DSN で設定することが唯一の適切な方法です (ただし、5.3 以降でのみサポートされています)。これを同時に
行うことができます。SET NAMES

他のすべての方法では、悪名高い半分架空の GBK インジェクションが可能になります。

error_reporting() の設定が完全​​に間違っていることに注意してください。無条件 -1 である必要があります。エラーの表示が心配な場合は、display_errors実行時に設定できる と呼ばれる適切な ini 設定があります。
error_reportingはエラーのレベルを設定し、常に最大にする必要があります。

于 2012-12-26T15:42:20.733 に答える
-3

私は常にdbconfigファイルに次のコードを記述します。

mysql_query("SET character_set_results = 'utf8',
                 character_set_client = 'utf8', 
                 character_set_connection = 'utf8',
                 character_set_database = 'utf8',  
                 character_set_server = 'utf8'");
于 2012-12-26T15:19:58.397 に答える