sqlsrv_connect pdo_sqlsrv mssql microsoft for conectar con php sql-server-2008 zend-framework utf-8

pdo_sqlsrv - PHP 5.4 en Linux: ¿Cómo conectarse con MS SQL Server 2008?



php sql server linux (1)

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.

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. Dice que es solo para Red Hat, pero sigo estas instrucciones para instalar:

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

Podría conectarme y seleccionar algunos de ellos, pero no pude insertar datos en él. Tengo un problema con los parámetros de enlace en las declaraciones de pdo.

Insertar datos como los siguientes no funcionó:

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

Pero si utilicé esto, funciona:

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

Así que renuncié a este controlador, porque mi aplicación 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. Configuro mi freeTDS.conf para usar UTF-8, cambio mis tablas para usar NVARCHAR en lugar de VARCHAR y podría insertar datos utf-8 como este:

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

Pero, en mi ZF 1.11, ¡no puedo pasar este atributo ''N'' en las consultas! Entonces mi aplicación aún no funcionó.

Como puedes ver, probé todo.

Entonces mi pregunta es : ¿Cómo puedo conectarme desde Linux, usando el juego de caracteres ZF 1.11 UTF-8, en MS SQL Server 2008?


La respuesta para mi pregunta es: ¡Use freeTDS! Hay un parámetro para el juego de caracteres en él:

[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, configure su conexión de esta 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

¡Soluciona el problema! ;)