我似乎无法使用带有参数的简单 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(或者每个人都这样做?)。
谢谢你。