【发布时间】:2012-11-17 11:38:26
【问题描述】:
我似乎无法让带有参数的简单 WHERE 子句起作用,我不断收到一条错误消息:
[Microsoft][ODBC SQL Server Driver][SQL Server]The data types varchar(max) and text are incompatible in the equal to operator. (SQLExecute[402] at ext\pdo_odbc\odbc_stmt.c:254)
我已经以多种不同的方式尝试过这个查询,例如
未命名:
$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = ?");
$query->execute( array('assessment') );
未命名并使用 bindValue 将其设置为字符串
$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = ?");
$query->bindValue(1, 'assessment', PDO::PARAM_STR);
$query->execute( );
命名并使用 bindParam 将其设置为字符串:
$val = 'assessment';
$query = $DBH->prepare("SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType = :myp");
$query->bindParam(':myp', $val, PDO::PARAM_STR);
$query->execute( );
但是不管我怎么做,我总是会收到这个错误信息。
有问题的列的类型是:varchar(max),因此假设发送的参数是“文本”类型,即使我将其指定为字符串值(char,varchar)
我无法更改数据库,因为它是用于其他软件的。
解决这个问题的方法是什么?我真的不想每次执行这样的 where 子句时都必须 CAST(或者每个人都这样做?)。
谢谢。
【问题讨论】:
-
遇到同样的问题...你解决了吗?
-
你试过
"SELECT TOP 1 * FROM bksb_Resources WHERE ResourceType LIKE ?"˙吗?如果不使用通配符,它的功能几乎与=相同。