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

6
我有一个Linux服务器Debian 6,安装了Apache 2.2和PHP 5.4。 我需要将我的应用程序与MS SQL Server 2008连接。
我的应用程序使用Zend Framework 1.11和字符集UTF-8(我将有来自世界各地的用户,并且他们将使用自己语言的数据)。
首先,我尝试使用适用于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));

但是如果我像这样使用,它就可以工作:
$stmt = $conn->prepare("insert into mar_regions (name) values ('".$param."')");
$resp = $stmt->execute();

所以我放弃了这个驱动程序,因为如果使用它,我的应用程序 ZF 1.11 将无法正常工作。

其次,我尝试使用 FreeTDS 的 PDO 驱动程序。这个可以正常工作,并且我可以在我的 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”属性!因此,我的应用程序仍然无法工作。

正如您所看到的,我尝试了所有方法。

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

1个回答

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

在Zend框架上,您可以按照以下方式配置您的连接:
;; 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

它解决了问题!;)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接