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


PHP 5.4 on Linux: How to connect with MS SQL Server 2008?

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

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

首先,我尝试使用Microsoft SQL Server ODBC 驱动程序。它说仅适用于红帽,但我按照以下说明进行安装:

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 如果这样的话将无法工作。

其次,我尝试使用PDO驱动程序用于FreeTDS。这个工作正常,我可以在我的 ZF 1.11 应用程序上使用。

但后来,我又遇到了一个问题:字符集。我将我的 freeTDS.conf 配置为使用 UTF-8,将我的表更改为使用 NVARCHAR 而不是 VARCHAR,并且可以像这样插入 utf-8 数据:

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

但是,在我的 ZF 1.11 上,我无法在查询中传递这个"N"属性!所以我的应用程序仍然不起作用。

如您所见,我尝试了所有方法。

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

我的问题的答案是:使用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 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

它解决了问题!;)