2012-05-31 11 views
6

Ho un server Linux Debian 6, con installato Apache 2.2 e PHP 5.4. Ho bisogno di collegare la mia domanda con un MS SQL Server 2008.PHP 5.4 su Linux: come connettersi con MS SQL Server 2008?

La mia applicazione sta utilizzando Zend Framework 1.11 e charset UTF-8 (avrò gli utenti da tutti i luoghi del mondo e metteranno i dati nel proprio linguaggio).

FRIST, ho provato a utilizzare il driver ODBC di Microsoft SQL Server per Linux. che dice è solo per Red Hat, ma seguire le seguenti istruzioni per l'installazione:

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

ho potuto collegare e fare alcune seleziona su di esso, ma non ho potuto inserire i dati su di esso. Ho un problema con i parametri di binding sulle istruzioni pdo.

Inserire i dati come il seguente non ha funzionato:

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

Ma se ho usato come il presente, funziona:

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

così ho rinunciato da questo driver, perché la mia domanda no ZF 1.11 non funzionerà se questo.

SECONDO, provo a utilizzare il driver PDO per FreeTDS. Questo funziona bene e potrei usare sulla mia applicazione ZF 1.11.

Ma poi, ho ancora un problema: i set di caratteri. Ho configurare il mio freetds.conf per usare UTF-8, cambiare le mie tabelle di usare NVARCHAR posto della VARCHAR e potrebbe inserire dati UTF-8 come questo:

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

Ma, sul mio ZF 1.11, non posso passare questo attributo 'N' su querys! Quindi la mia applicazione non funzionava ancora.

Come potete vedere ho provato tutto.

Quindi la mia domanda è: Come connettersi da Linux, utilizzando ZF 1.11 set di caratteri UTF-8, su MS SQL Server 2008?

risposta

4

La risposta alla mia domanda è: Usa freeTDS! Theres un parametro per charset su di esso:

[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 

In Zend Framework, configurare la connessione in questo modo:

;; 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 

risolve il problema! ;)

Problemi correlati