2012-05-31 91 views
6

我有一臺Linux服務器Debian 6,安裝了Apache 2.2和PHP 5.4。 我需要連接我的應用程序與MS SQL Server 2008.Linux上的PHP 5.4:如何與MS SQL Server 2008連接?

我的應用程序使用Zend Framework 1.11和字符集UTF-8(我將有來自世界各地的用戶,他們將把數據放在自己的語言)。

FRIST,我試圖使用Microsoft SQL Server ODBC驅動程序的Linux。 它說僅適用於紅帽,但我按照這些說明進行安裝:

http://www.codesynthesis.com/~boris/blog/2011/12/02/microsoft-sql-server-odbc-driver-linux/

我可以連接,使一些關於它的選擇,但我不能在上面插入數據。我在pdo語句的綁定參數上遇到問題。

插入類似下面的數據沒有工作:

$stmt = $conn->prepare("insert into mar_regions (name) values (:name)"); 
$resp = $stmt->execute(array(':name' => $param)); 

但是,如果我用像這樣,它的工作原理:

$stmt = $conn->prepare("insert into mar_regions (name) values ('".$param."')"); 
$resp = $stmt->execute(); 

所以我從這個司機放棄了,因爲我的應用程序如果沒有,ZF 1.11將不起作用。

第二,我嘗試使用FreeTDS的PDO驅動程序。這個工作正常,我可以使用我的ZF 1.11應用程序。

但是後來我又遇到了一個問題:charsets。 配置我freeTDS.conf使用UTF-8,改變我的表使用NVARCHAR insted的VARCHAR,並可以插入UTF-8的數據是這樣的:

$stmt = $dbh->prepare("insert into mar_teste (name) values (N'ンから初・配信 € зеленый банан ÀÀÀÀáááááá')"); 
$resp = $stmt->execute(); 

但是,在我的ZF 1.11,我不能在querys上傳遞這個'N'屬性!所以我的應用程序仍然沒有工作。

正如你所看到的我嘗試了一切。

所以我的問題是:如何在MS SQL Server 2008上使用ZF 1.11 charset UTF-8從linux進行連接?

回答

4

我的問題的答案是:使用freeTDS! 即使世界對字符集的參數就可以了:

[MyDSN] 
    host = <<ip>> 
    port = <<port>> 
    # use 8.0 for newer versions of SQLSERVER 
     tds version = 8.0 
     # text size don't need to be such a high value, its just an example 
     text size = 4294967295 
     client charset = UTF-8 

在Zend框架,配置連接這樣的:

;; BANCO DE DADOS LINUX 
database.adapter    = PDO_MSSQL 
database.params.pdoType   = dblib 

database.params.host   = MyDSN 
database.params.dbname   = <<dbname>> 
database.params.username  = <<username>> 
database.params.password  = <<passwd>> 
database.params.driver_options.charset = UTF-8 

database.isDefaultTableAdapter = true 

它解決了這個問題! ;)