【问题标题】:Problem with PDO WHERE when using VARCHAR-columns in SQL Server在 SQL Server 中使用 VARCHAR 列时 PDO WHERE 出现问题
【发布时间】:2021-10-09 07:02:30
【问题描述】:

我们正在将我们的 MS SQL Server 从 SQL Server 2012 升级到当前版本。 我们正在使用 PDO 和在 CentOS Linux 上运行的 M$ ODBC 驱动程序。 PHP版本是7.4。

问题是,如果有一个(准备好的)条件,比如

WHERE variable = ? 

变量是 VARCHAR 类型的,出现错误

[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]The data types varchar and text are incompatible in the equal to operator

示例代码如下:

$stmt = $db->prepare("SELECT * FROM Users WHERE user_login = ? AND user_application  = ?");
$stmt->execute([$login, $app]);

user_login 和 user_application 都是 VARCHAR 列和 $login 和 $app 普通 PHP 字符串变量。

之前的 SQL Server 没有问题,比较正常。我不想通过所有代码库来在无数地方规避这个问题 - 所以 - 是否有一些设置(SQL 服务器、ODBC 驱动程序、PHP 配置......)在哪里再次设置“正确”?

【问题讨论】:

  • Edit您的问题显示一些演示该问题的示例代码,包括对preparebindValue的调用。
  • 添加示例代码...
  • 可能值得尝试 SQLSRV 驱动程序。它仍然会在下面使用您的 ODBC 驱动程序,但可能会以不同的方式处理类型。
  • 对不起,忘了说代码是在 CentOS-linux 上运行的,AFAIK SQLSRV-driver 是 Windows only?

标签: php sql-server pdo


【解决方案1】:

似乎是数据库迁移后出现的权限错误。我删除了来自恢复操作的用户并再次授予正确的权限。只是,我很肯定,我已经做过一次了。而且我认为尝试使用数据库时没有登录错误。

对不起,愚蠢的问题。虽然,我一直说,没有愚蠢的问题,只有愚蠢的提问者......

汉克

【讨论】:

  • 也许这次您将记录安装开发和生产环境所需的要求和安装过程。这是灾难恢复的基本部分 - 但只是一部分。令人担忧的是,您最近才“发现”使用两个数据库。也许您有“孤立用户”问题(您可以搜索的术语) - 但我预计会出现非常不同的错误。也许这暴露了应用程序错误处理中的一个缺陷,也应该加以解决。
猜你喜欢
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多