PHP PDO: juego de caracteres, nombres de conjuntos?
Tenía esto anteriormente en mi conexión mysql_* normal:
mysql_set_charset("utf8",$link);
mysql_query("SET NAMES 'UTF8'");
¿Lo necesito para la DOP? ¿Y dónde debería tenerlo?
$connect = new PDO("mysql:host=$host;dbname=$db", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
Aceptado
Lo tendrás en tu cadena de conexión como:
"mysql:host=$host;dbname=$db;charset=utf8mb4"
SIN EMBARGO, antes de PHP 5.3.6, se ignoraba la opción del juego de caracteres. Si estás ejecutando una versión anterior de PHP, debes hacerlo así:
$dbh = new PDO("mysql:host=$host;dbname=$db", $user, $password);
$dbh->exec("set names utf8mb4");
Antes de PHP 5.3.6, se ignoraba la opción del juego de caracteres. Si estás ejecutando una versión anterior de PHP, debes hacerlo así:
<?php
$dbh = new PDO("mysql:$connstr", $user, $password);
$dbh -> exec("set names utf8");
?>
Esta es probablemente la forma más elegante de hacerlo.
Justo en la llamada al constructor PDO, pero evitando la opción de juego de caracteres con errores (como se mencionó anteriormente):
$connect = new PDO(
"mysql:host=$host;dbname=$db",
$user,
$pass,
array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)
);
Funciona muy bien para mí.