ZendFramework, ben bağlamak her zaman utf8 PDO koşmak SET İSİMLERİ yapmak için nasıl

6 Cevap php

How to make PDO adapter run SET NAMES utf8 each time I connect, In ZendFramework. I am using an INI file to save the adapter config data. what entries should I add there?

Açık değildi ben yapılandırma kodu bu kısmını görüyoruz, ben, benim proje değil, php kod içinde config.ini dosyasında bunu yapmak için doğru sözdizimi için arıyorum.

6 Cevap

Itay,

Çok güzel bir soru. Neyse ki sizin için cevabı çok basit:

database.params.driver_options.1002 = "SET NAMES utf8"

1002 sabit PDO'nun değeri :: olduğu MYSQL_ATTR_INIT_COMMAND

Siz Config.ini de sabit kullanamazsınız

benim google-fu korku

$pdo = new PDO(
    'mysql:host=mysql.example.com;dbname=example_db',
    "username",
    "password",
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

İlk ;) vurdu

sadece config koymak

database.params.charset = "utf8"

or after ZF 1.11 this would work to resources.db.params.charset = utf8 that is it

The connection in zend_db is lazy which means it connects on the first query. if you have a static page with no query's in it it will never even connect - even if it is initialized in you bootstrap file.

böylece çalışıyor:

$db->query("SET NAMES 'utf8'");

Is not so smart. Big thanks to dcaunt for his solution.

All this methods shoud work, except in some special circumstances. For example, if you are running a web server locally on a windows machine with php < 5.3.1, only a 'manual' $db->query("SET NAMES 'utf8'"); before your actual query will work. Any other method trying to use MYSQL_ATTR_INIT_COMMAND will fail.

İşte bu çok sorun ile mücadele, bugün öğrendim:

  1. PDO ifade edemez :: MYSQL_ATTR_INIT_COMMAND bazı ortamlarda (yani maden, özellikle ben bilmiyorum) içinde. Sen explicitely yerine 1002 kullanmak zorunda

  2. Resources.db.params.charset = "utf8: Zend Framework 1.11 (belki 1.8 beri, teyit edilmesi) ile, = sizin config.ini in" İSİMLERİ utf8 SET "database.params.driver_options.1002 ayarlamak gerekmez Zend_Db_Adapter_Pdo_Mysql sizin için bunu yapmak için "yeterli olacaktır.

  3. MYSQL_ATTR_INIT_COMMAND çalışması için pencere üzerinde, php> = 5.3.1 gerekir.

  4. Eğer 5.3.1 veya daha yüksek (ben de 5.3.3 test) ile php sürümü yerine, size php.ini pdo_mysql.default_socket için bir değer ayarlamak emin olmanız gerekir. Varsayılan boş değer (teyit edilecek: Bu konuda bir şeyler okudum ama noktadan yaklaşık 5 bulduktan sonra onsuz denemek için uğraşmadı) çalışmaz

  5. Ayrıca emin pencereler '127 .0.0.1 localhost 'si yapmak gerekir \ system32 \ drivers \ etc \ hosts gizli sistem dosyası (ki php 5.3.0 için bir sorun değildi)

Bütün bu düşünceyle, size kendinizi googling günü kurtarmak ve kılların bazı tutmak gerekir! ;)

Lütfen önyükleme dosyasında ...

$db = Zend_Db::factory($adapter, $config);
$db->query("SET NAMES 'utf8'");

o Eğer kayıt defterinde bu örneği kaydetmeye

Zend_Registry::set('db', $db);