Dit:
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, 'SET NAMES utf8');
is volkomen zinloos. Zie http://php.net/manual/en/ref.pdo- mysql.php
. De MYSQL_ATTR_INIT_COMMAND
wordt uitgevoerd direct nadat de verbinding tot stand is gebracht, niet later. Als u dit instelt op een reeds volledig gemaakt PDO-object, is het te laat en wordt het nooit uitgevoerd. Je moet het doorgeven aan de constructor:
new PDO(..., ..., ..., array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'))
Als alternatief, als uw PHP-versie dit ondersteunt, voegt u charset=utf8
. toe naar de DSN.