samedi 23 mars 2013

Gérer d'encodage de la connection

Pour forcer l'échange en UTF8 avec MySQL, nous devons envoyer une requète au serveur pour lui expliquer que nous allons communiquer avec lui en UTF8, de façon standard, cela se joue au moment de la connection, et Ô bonheur, l'Object PDO est prévus pour ça (Quel heureux hazard !).
En effet, la ligne :
?
1
$connection = new PDO( $dns, $utilisateur, $motDePasse );
Nous permet d'ajouter un 4ème paramètres pour préciser des options de connection, comme par exemple une requète à exécuter au moment ou la connection est établie, cela donne :
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Connection au serveur
try {
  $dns = 'mysql:host=localhost;dbname=ma_base_de-donnees';
  $utilisateur = 'sergio';
  $motDePasse = 'azerty';
 
  // Options de connection
  $options = array(
    PDO::MYSQL_ATTR_INIT_COMMAND    => "SET NAMES utf8"
  );
 
  // Initialisation de la connection
  $connection = new PDO( $dns, $utilisateur, $motDePasse, $options );
} catch ( Exception $e ) {
  echo "Connection à MySQL impossible : ", $e->getMessage();
  die();
}
Notez l'ajout de la variable $options (un array) qui va contenir une option 'MYSQL_ATTR_INIT_COMMAND', cette options permet d'envoyer une requètes au moment ou la connection est établie, la requètes en question "SET NAMES utf8" indique simplement à MySQL que nous allons echanger nos données en UTF8.
Bon la version moins standard consiste simplement à faire cette requète juste après la connection :
?
1
2
3
4
5
6
7
8
9
10
11
// Connection au serveur
try {
  $dns = 'mysql:host=localhost;dbname=ma_base_de-donnees';
  $utilisateur = 'sergio';
  $motDePasse = 'azerty';
  $connection = new PDO( $dns, $utilisateur, $motDePasse );
  $connection->query("SET NAMES utf8");
} catch ( Exception $e ) {
  echo "Connection à MySQL impossible : ", $e->getMessage();
  die();
}
Ca reviens au même, mais disons que la première version, certes plus verbeuse, est plus "élégante" (et accessoirement, nous allons par la suite ajouter des paramètres dans les options).

Aucun commentaire:

Enregistrer un commentaire