Linux上的PHP 5.4:如何连接MS SQL Server 2008?

vin*_*a87 6 php zend-framework utf-8 sql-server-2008

我有一台Linux服务器Debian 6,安装了Apache 2.2和PHP 5.4.我需要将我的应用程序与MS SQL Server 2008连接.

我的应用程序使用Zend Framework 1.11和charset UTF-8(我将拥有来自世界各地的用户,他们将使用他们自己的语言放置数据).

FRIST,我尝试使用适用于Linux的Microsoft SQL Server ODBC驱动程序.它说只适用于Red Hat,但我按照这些说明安装:

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));
Run Code Online (Sandbox Code Playgroud)

但如果我像这样使用它,它的工作原理:

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

所以我放弃了这个驱动程序,因为如果这样我的应用程序没有ZF 1.11将无法工作.

第二,我尝试使用PDO Driver for FreeTDS.这个工作正常,我可以在我的ZF 1.11应用程序上使用.

但后来,我又遇到了一个问题:charsets.我配置我的freeTDS.conf使用UTF-8,更改我的表以使用VARCHAR的NVARCHAR,并可以插入utf-8数据,如下所示:

$stmt = $dbh->prepare("insert into mar_teste (name) values (N'??????? € ??????? ????? ÀÀÀÀáááááá')");
$resp = $stmt->execute();
Run Code Online (Sandbox Code Playgroud)

但是,在我的ZF 1.11上,我无法在查询中传递这个'N'属性!所以我的申请仍然没有奏效.

如你所见,我尝试了一切.

所以我的问题是:如何在MS SQL Server 2008上使用ZF 1.11 charset UTF-8从linux连接?

vin*_*a87 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
Run Code Online (Sandbox Code Playgroud)

在 Zend Framework 上,像这样配置您的连接:

;; 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
Run Code Online (Sandbox Code Playgroud)

它解决了问题!;)