Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 13-04-2007 14:48:17

stephane
Membre
Lieu: Biot
Date d'inscription: 26-03-2007
Messages: 33
Site web

[Résolu][Zend_Db][0.9.2] Connexion UTF-8 avec une base de données

En complément du message Charset, Casse set, char tête.., voici la solution pour établir une connexion avec la base de données (en l'occurrence MySQL) en utilisant UTF-8 :

Code:

<?php
  class My_Db_Adapter_Pdo_Mysql extends Zend_Db_Adapter_Pdo_Mysql {
    /**
     * Creates a PDO object and connects to the database.
     *
     * @return void
     * @throws Zend_Db_Adapter_Exception an error occured
     */
    protected function _connect() {
      // Checks whether a connection has already been established
      if ($this->_connection) {
        return;
      }
      
      // Setups the database connection
      parent::_connect();
      
      // Provides UTF-8 support for any further database calls (setup server-
      // client communication)
      try {
        $this->query('SET NAMES UTF8');
      } catch (Exception $exception) {
        echo "Unable to setup connection in UTF-8 mode with the database";
      }
    }
  }
?>

Il faut bien sûr instancier par soi-même cet adapteur :

Code:

  // Setups database connection
  $database = new My_Db_Adapter_Pdo_Mysql($configuration->database->configuration->asArray());

Au lieu d'utiliser la factory :

Code:

  // Setups database connection
  $database = Zend_Db::factory($configuration->database->adapter, $configuration->database->configuration->asArray());

Cette solution est tirée du bug PDO: Allow definition of attributes to pass to the PDO object, upon creation of Zend_DB object. Elle est bien meilleure que celle consistant à modifier une instance de Zend_Db puisque la connexion n'est établie que lorsque vous effectuez vraiment une requête à la base de données.

Hors ligne

 

#2 13-04-2007 14:56:17

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu][Zend_Db][0.9.2] Connexion UTF-8 avec une base de données

Merci pour cette astuce. Avec les 2 topics on commence à avoir beaucoup d'informations sur le passage en UTF-8. Je vais essayer de rédiger un petit tuto qui explique tout ça dans le détail.
J'aurai sans doute besoin de quelques relectures smile
Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#3 13-04-2007 15:04:49

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Résolu][Zend_Db][0.9.2] Connexion UTF-8 avec une base de données

Bon... pour ceux qui n'ont pas de problème de perfs et qui veulent un code plus léger...

Code:

$database = Zend_Db::factory($adapterName, $conf);
$database->query('SET NAMES UTF8');

Mais comme le disait stephane, ça veut dire que dès votre fichier d'initialisation, votre connexion vers la base est ouverte, même si vous ne faites aucune requête...
Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#4 13-05-2009 09:03:20

fatahou
Membre
Lieu: La Rochelle - France
Date d'inscription: 23-04-2009
Messages: 31

Re: [Résolu][Zend_Db][0.9.2] Connexion UTF-8 avec une base de données

Je rencontre le même type de problème. Un tuto intéressant par là:
http://www.iezzi.ch/archives/371

Hors ligne

 

#5 13-05-2009 11:03:07

fatahou
Membre
Lieu: La Rochelle - France
Date d'inscription: 23-04-2009
Messages: 31

Re: [Résolu][Zend_Db][0.9.2] Connexion UTF-8 avec une base de données

Comment fait t'on lorsque on utilise un autre PDO? Par exemple MSSQL ne supporte pas l'instruction SET NAMES UTF8.

Je rencontre ce problème en  ce moment. J'utilise un formulaire DOJO les labels ecrit en dur son bien encodé. Et ce qui vient de la BD (àçèé...) est mal encodé (des points d'interrogation dans mini losanges)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages