Utilisez-vous vraiment encore PHP>=version 3.6 et <5.3.6 ?
En supposant que vous ayez 5.3.6 ou une version ultérieure...
Jeux de caractères et PDO_MYSQL DSN dites que vous devriez utiliser
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');
Et implique (pas assez clairement) que utf8 doit être remplacé par utf8mb4 le cas échéant.
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' n'est pas aussi bon, mais c'était l'alternative avant 5.3.6.
Je pense que "dangereux" est un mot trop fort, même avant la version 5.3.6.
Une technique connexe :Utilisation de init_command = SET NAMES ... dans my.cnf c'est mauvais car init_command n'est pas exécuté lors de la connexion en tant que root .
utf8mb4 est le CHARACTER SET préféré pour UTF-8 car il inclut Emoji et certains caractères chinois qui manquaient dans utf8 . Ce jeu de caractères est disponible à partir de MySQL version 5.5.3.