これ:
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
完全に無意味です。 http://php.net/manual/en/ref.pdo-を参照してください。 mysql.php
。 MYSQL_ATTR_INIT_COMMAND
接続が確立された直後に実行されます。すでに完全に作成されたPDOオブジェクトにこれを設定すると、手遅れになり、実行されません。コンストラクターに渡す必要があります:
new PDO(..., ..., ..., array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'))
または、PHPのバージョンでサポートされている場合は、charset=utf8
を追加します。 DSNに。