相关疑难解决方法(0)

Linux上的PHP 5.4:如何连接MS 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连接?

php zend-framework utf-8 sql-server-2008

6
推荐指数
1
解决办法
9872
查看次数

PHP,ORM,MSSQL和Unicode,是否可以将这些工作结合起来?

如果要将unicode数据保存到MSSQL,则需要保存为列类型nvarchar(et.al),并且必须在SQL STRING LITERALS前加上大写字母N.如果使用预准备语句,则不需要使用N作为前缀值.

插入tbl(col)值(N'hello')

如果您正在使用像ZF DB这样的ORM,那么您正在使用PDO来连接MSSQL(或者您正在Windows上部署,在这种情况下,您正在使用SQLSRV或PDO_SQLSRV,一切都会正常工作,我的问题不再有意义了).

如果您正在使用任何连接到Linux上的mssql(sybase,dblib等)的PDO变体,那么您将无法获得真实的预处理语句,仅进行模拟.

如果您已经在线路级别模拟了预准备语句,则SQL完全写出只有字符串文字,这意味着您必须为任何潜在的unicode值添加前缀N.

  1. 是否可以使用ZF自动添加N值的任何char值?
  2. 是否有任何ORM/TableGateway库允许这种值操作?
  3. 有没有办法从Linux启用服务器端预处理语句?
  4. 有没有人真正从Linux代码运行生产PHP并让它运行MSSQL?(如果是的话,你如何处理Unicode?)

编辑:我可以从Linux获得unicode保存到MSSQL,但是将FreeTDS协议升级到7/8似乎打破了所有框架/库/ orms,因为绝对需要改变带有N前缀的普通SQL.我不确定互联网上有谁声称升级到协议版本7/8修复了他们的unicode问题实际上做了什么,除了用非便携方式手写每个SQL语句.似乎继续使用Freetds 4.2是处理Unicode/UTF-8和mssql的最佳方式.

php sql-server unicode orm pdo

5
推荐指数
1
解决办法
5314
查看次数

标签 统计

php ×2

orm ×1

pdo ×1

sql-server ×1

sql-server-2008 ×1

unicode ×1

utf-8 ×1

zend-framework ×1