考虑下表:
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驱动程序中的错误的问题?
答案 0 :(得分:0)
双引号可能导致问题。试试这段代码:
$stmt = odbc_prepare($dsn, $query);
$filter = array();
$filter[] = "'%12345678%'"; // single quotes around the entire LIKE
odbc_execute($stmt, $filter);