gpt4 book ai didi

PHP PDO ODBC - 数据类型在等于运算符中不兼容

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:39:11 25 4
gpt4 key购买 nike

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

谢谢。

最佳答案

我们有一个与此类似的问题,在我们的例子中,我们的 /etc/odbc.ini 文件中有以下内容:

[ServerAlias]
Driver = FreeTDS
Server = 1.2.3.4
PORT = 1433
TDS_Version = 8.0

我们发现,如果您将 TDS_Version 更改为 7.2,我们所有的绑定(bind)查询都会开始正常工作。

[ServerAlias]
Driver = FreeTDS
Server = 1.2.3.4
PORT = 1433
TDS_Version = 7.2

我不确定这是什么原因,但我怀疑它可能在某处有记录。

关于PHP PDO ODBC - 数据类型在等于运算符中不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13625078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com