【发布时间】:2013-05-08 02:45:47
【问题描述】:
有一个专栏url(nvarchar(200), not null)
<?php
//
$pdo = new PDO('odbc:mssql', 'xxx', 'yyy');
$pdo->setAttribute(PDO::ATTR_PERSISTENT, false);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
// plain sql query: WORKS FINE!
$sth = $pdo->prepare("SELECT COUNT(*) FROM pagina WHERE url = '/webito'");
$sth->execute();
// using bindValue: ERROR!
$sth = $pdo->prepare("SELECT COUNT(*) FROM pagina WHERE url = :unique_value");
$sth->execute(array('unique_value' => '/webito'));
返回错误:
Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 402 [FreeTDS][SQL Server]The data types nvarchar and text are incompatible in the equal to operator. (SQLExecute[402] at /builddir/build/BUILD/php-5.4.15/ext/pdo_odbc/odbc_stmt.c:254) in /root/php/test.php on line 13
这是一个错误吗?
使用:php 5.4.15、unixodbc 2.2.14、freetds 0.91、sql-server-2012、centos-x64 6.4
更新:
似乎是bug。我找到了这个patch,但只适用于ODBC Driver 11 for SQL Server(我尝试过使用FreeTDS,没有运气)。我设法从源代码安装 PHP,并应用此补丁并将 FreeTDS 更改为 SQL Server 的 ODBC Driver 11;现在正在工作。
- php 5.4.15
- unixODBC 2.3.0
- 适用于 SQL Server 的 ODBC 驱动程序 11
- sql-server-2012
- centos-x64 6.4
【问题讨论】:
-
嗯,似乎是一个错误。现在我正在尝试用我找到的补丁编译 PHP。
-
在 FreeTDS 中,只需在
freetds.conf中设置tds version = 7.2即可!
标签: php sql-server pdo odbc freetds