Comment faire AOP exécuter le nom du SET utf8 chaque fois que je connecte, Dans ZendFramework
Comment faire AOP adaptateur exécuter le nom du SET utf8 chaque fois que je connecte, Dans ZendFramework.
Je suis en utilisant un fichier INI pour enregistrer la carte de config de données. quelles entrées dois-je y ajouter?
Si c'était pas clair, je suis à la recherche de la syntaxe correcte de le faire dans la config.fichier ini de mon projet, et non dans le code php, que je considère cette partie de la configuration de code.
Vous devez vous connecter pour publier un commentaire.
Itay,
Une très bonne question. Heureusement pour vous, la réponse est très simple:
1002 est la valeur de la constante PDO::MYSQL_ATTR_INIT_COMMAND
Vous ne pouvez pas utiliser la constante dans la config.ini
peur que mon google-fu
premier coup 😉
il suffit de mettre ceci dans votre config
ou après ZF 1.11 ce serait le travail de
resources.db.params.charset = utf8
qu'est-ce
La connexion dans zend_db est paresseux qui signifie qu'il se connecte sur la première requête.
si vous avez une page statique avec aucune requête n'est-il ne sera jamais à même de se connecter, même si elle est initialisée dans vous fichier bootstrap.
donc en cours d'exécution:
N'est pas si intelligent.
Un grand merci à dcaunt pour sa solution.
Toutes ces méthodes shoud de travail, sauf dans certaines circonstances particulières. Par exemple, si vous exécutez un serveur web en local sur une machine windows avec php < 5.3.1, seulement un 'manuel' $db->query("SET NAMES 'utf8'"); avant votre requête travail.
Toute autre méthode d'essayer d'utiliser MYSQL_ATTR_INIT_COMMAND échouera.
Voici ce que j'ai appris aujourd'hui, aux prises avec ce problème :
Vous ne pouvez pas se référer à PDO::MYSQL_ATTR_INIT_COMMAND dans certains environnements (c'est à dire la mienne, plus précisément je ne sais pas). Vous devez explicitement l'utilisation 1002 au lieu
Avec Zend Framework 1.11 ( peut-être depuis la 1.8, à confirmer ), vous n'avez pas besoin de définir la base de données.params.driver_options.1002 = "SET NAMES utf8" dans votre config.ini : ressources.db.params.charset = "utf8" sera suffisant pour Zend_Db_Adapter_Pdo_Mysql de le faire pour vous.
Sur windows, vous avez besoin de php >= 5.3.1 pour MYSQL_ATTR_INIT_COMMAND de travail.
Si vous remplacez votre version de php avec 5.3.1 ou plus (j'ai aussi testé 5.3.3), vous devez vous assurer que vous définissez une valeur pour pdo_mysql.default_socket dans votre php.ini. La valeur vide par défaut ne fonctionne pas (à confirmer : j'ai lu quelque chose à ce sujet, mais ne vous embêtez pas à essayer sans elle, c'est après avoir trouvé le point 5)
Vous devez également vous assurer que vous avez "127.0.0.1 localhost" dans votre windows\system32\drivers\etc\hosts fichier système caché (qui n'était pas un problème de php 5.3.0)
Avec tout cela à l'esprit, vous devriez être en mesure de sauver de vous-même un jour de googler et de garder certains de vos poils! 😉
Vous suffit d'exécuter cette commande avant de commencer les requêtes, vous n'avez qu'à exécuter une seule fois avant les requêtes et non pas pour chaque requête.
Exemple complet
Dans votre fichier d'amorçage...
puis vous enregistrez cette instance dans votre registre