2012-05-31 9 views
6

Tengo un servidor Linux Debian 6, con Apache 2.2 y PHP 5.4 instalados. Necesito conectar mi aplicación con un MS SQL Server 2008.PHP 5.4 en Linux: cómo conectarse con MS SQL Server 2008?

Mi aplicación está usando Zend Framework 1.11 y el juego de caracteres UTF-8 (tendré usuarios de todos los lugares del mundo y pondrán los datos en su propio idioma).

FRIST, traté de usar el controlador ODBC de Microsoft SQL Server para Linux. que dice es sólo para Red Hat, pero sigue estas instrucciones para instalar:

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

podría conectar y hacer algunas selecciona en él, pero no pude insertar datos en él. Tengo un problema con los parámetros de enlace en las declaraciones de pdo.

Insertar datos como la siguiente no funcionaron:

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

Pero si utilicé como el presente, funciona:

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

Así que renunció a partir de este controlador, ya que mi solicitud no ZF 1.11 no funcionará si esto.

SEGUNDO, trato de usar el controlador PDO para FreeTDS. Este funciona bien y podría usarlo en mi aplicación ZF 1.11.

Pero luego, tengo un problema más: conjuntos de caracteres. configurar mi freetds.conf utilizar UTF-8, cambiar mis tablas para utilizar en restaurantes en vez de NVARCHAR y VARCHAR podría insertar datos UTF-8 como esta:

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

Pero, en mi ZF 1.11, no puedo pasa este atributo 'N' en querys! Entonces mi aplicación aún no funcionó.

Como puedes ver, probé todo.

Así que mi pregunta es: ¿Cómo conectarse desde Linux, utilizando ZF 1.11 chatset UTF-8, en MS SQL Server 2008?

Respuesta

4

La respuesta a mi pregunta es: Use freeTDS! Hay un parámetro para juego de caracteres en ella:

[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 

En Zend Framework, configurar la conexión de la siguiente manera:

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

que resuelve el problema! ;)

Cuestiones relacionadas