J’ai eu cela auparavant dans ma connexion normale mysql_ * :
Ai-je besoin de l’AOP ? Et où je devrais l’ai ?
J’ai eu cela auparavant dans ma connexion normale mysql_ * :
Ai-je besoin de l’AOP ? Et où je devrais l’ai ?
Pour être complet, il y a en fait trois façons de définir l'encodage lors de la connexion à MySQL à partir de PDO, et ceux qui sont disponibles dépendent de votre version de PHP. L'ordre de préférence:
charset
paramètre dans la chaîne de DSNPDO::MYSQL_ATTR_INIT_COMMAND
option de connexionSET NAMES utf8
manuellementCet exemple de code met en œuvre tous les trois:
<?php
define('DB_HOST', 'localhost');
define('DB_SCHEMA', 'test');
define('DB_USER', 'test');
define('DB_PASSWORD', 'test');
define('DB_ENCODING', 'utf8');
$dsn = 'mysql:host=' . DB_HOST . ';dbname=' . DB_SCHEMA;
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
);
if( version_compare(PHP_VERSION, '5.3.6', '<') ){
if( defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){
$options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'SET NAMES ' . DB_ENCODING;
}
}else{
$dsn .= ';charset=' . DB_ENCODING;
}
$conn = @new PDO($dsn, DB_USER, DB_PASSWORD, $options);
if( version_compare(PHP_VERSION, '5.3.6', '<') && !defined('PDO::MYSQL_ATTR_INIT_COMMAND') ){
$sql = 'SET NAMES ' . DB_ENCODING;
$conn->exec($sql);
}
Faire tous les trois est peut-être exagéré (sauf si vous écrivez une classe que vous envisagez de distribuer ou de réutilisation).
Je tiens juste à ajouter que vous devez vous assurer que votre base de données est créée avec COLLATE utf8_general_ci ou selon le classement que vous souhaitez utiliser, Sinon vous risquez de vous retrouver avec un autre que prévu.
Dans phpmyadmin, vous pouvez voir le classement en cliquant sur votre base de données et choisir les opérations. Si vous essayez de créer des tableaux avec un autre classement que votre base de données, vos tables de fin avec le classement de base de données, de toute façon.
Donc, assurez-vous que le classement de votre base de données est juste avant la création de tables. Espérons que cela sauve quelqu'un quelques heures lol
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.