Biz de tüm yöntemleri denedim ve DEPARTMENTNAME alanlarında unicode veri işleme iki iş çözümleri bulundu. Ne yazık ki, SQL Server Driver for PHP hala bazı hatalar var ve UTF-16LE elle DEPARTMENTNAME gibi alanlarını dönüştürmek zorunda olarak kullanmak gerçekten zor. Orada Zend Framework 1.9.0 destek olduğunu, ancak ben henüz bakmadım.
Şu anda, PHP SQL Server erişmek için en iyi yolu, COM ve OLEDB kullanarak gibi görünüyor:
$conn = new COM('ADODB.Connection', null, 65001);
$conn->Open('Provider=SQLNCLI;Server=SERVER;Database=DB;Uid=USER;Pwd=PASS');
$rs = $conn->Execute('SELECT nvarcharfield FROM sometable');
while (!$rs->EOF) {
echo $rs->Fields('nvarcharfield')->value, "\n";
$rs->MoveNext();
}
$rs->Close();
"65001" Bu bileşen ne istediğiniz muhtemelen UTF-8 modunda çalışması gerektiğini gösterir. Yani içinde ve dışında tüm veriler UTF-8 kodlama olacaktır.
Hazırlanan sorgular COM kullanarak programlamak kadar karmaşık olmasa bu harika olurdu, böylece PHP için ADOdb bakmak isteyebilirsiniz. Daha sonra kod sadece biraz farklı olur:
$conn = NewADOConnection('ado_mssql');
$conn->charPage = 65001;
$conn->Connect('Provider=SQLNCLI;Server=SERVER;Database=DB;Uid=USER;Pwd=PASS');
$conn->SetFetchMode('ADODB_FETCH_ASSOC');
$rs = $conn->Execute('SELECT nvarcharfield FROM sometable');
while (!$rs->EOF) {
echo $rs->fields['nvarcharfield'], "\n";
$rs->MoveNext();
}
$rs->Close();
ADODB kullanarak, ADOdb hazırlanan sorgular yazmak ve anlamak çok daha kolay.
SQL Server 2008 yeni SQL Native Client varsa, "SQLNCLI10" ile sağlayıcı "SQLNCLI" değiştirmek isteyebilirsiniz.
En kısa zamanda ben bazı ünü almak gibi, ben bağlantıları inline (yeni kullanıcılar için izin verilen tek köprü) ekleyeceğiz.
http://devzone.zend.com/article/4906-Zend-Framework-1.9.0-Released
http://msdn.microsoft.com/de-de/library/system.data.oledb.oledbcommand.prepare.aspx
http://adodb.sourceforge.net/
http://phplens.com/lens/adodb/docs-adodb.htm#prepare