PHP ODBC:字符串数据,在预准备语句中从LIKE子句截断

时间:2016-10-10 15:09:08

标签: php sql-server odbc

考虑下表:

CREATE TABLE foo (a VARCHAR(8), b VARCHAR(20))

然后考虑以下准备好的声明:

SELECT count(*) FROM foo WHERE a LIKE ?

最后,考虑以下PHP行:

$stmt = odbc_prepare($dsn, $query); // Where $query is the above query
$filter = "%12345678%"; // Note: two wildcards and 8 real characters
odbc_execute($stmt, array($filter));

在Windows x86上使用PHP 5.3.13(作为WAMP包的一部分),以及Microsoft SQL Server ODBC驱动程序版本06.01.7601和Microsoft SQL Server Native Client版本10.50.4000,odbc_execute失败,生成“字符串数据,右截断”错误。

相反,如果我将过滤字符串直接替换为查询,如下所示:

SELECT count(*) FROM foo WHERE a LIKE '%12345678%'

当然它工作得很好,因为LIKE不应该导致该错误。

这是关于准备好的语句,还是PHP或SQL Server驱动程序中的错误的问题?

1 个答案:

答案 0 :(得分:0)

双引号可能导致问题。试试这段代码:

$stmt = odbc_prepare($dsn, $query);
$filter = array();
$filter[] = "'%12345678%'";          // single quotes around the entire LIKE 
odbc_execute($stmt, $filter);