【问题标题】:SQL Query with like returns differently in php带有like的SQL查询在php中返回不同
【发布时间】:2013-03-22 17:11:09
【问题描述】:

已解决:我测试了将查询编写为存储过程,然后再次测试 在 php.ini 中仍然报告不正确。最终我发现是因为 我有一些带有空值的列 PHP 正在奇怪地阅读它们。 令人失望的是 Perl 处理得更好,但是很好。

我正在使用 PHP 5.3.3 和 adodb 来访问 MS SQL Server 2012。我的大部分查询都很好,但我正在尝试使用通配符进行完全连接。

这里是开启部分:

on a_table.hostname LIKE '%' + r_table.Hostname + '%' 
OR '%' + a_table.hostname like r_table.Name + '%'

当我在 SQL Studio 中执行查询时,我得到 1224 条记录。 在 PHP 中,2406。我查看了 sql server 上的日志,它运行的查询是准确的,复制和粘贴时返回预期/正确数量的结果。

如果我在我的 PHP 中编辑查询并删除连接的 %s,则结果与直接执行查询一致(如果通配符也从中删除)。

我已经用 PHP 的 mssql 函数和 adodb 测试了查询,结果相同。

编辑:我刚刚用三种方式测试了查询:通过 Perl、Sql studio 和 PHP。 Perl 和 SQL 工作室是一样的 - PHP 仍然是错误的。

【问题讨论】:

  • 连接是“.”在 php 中(相对于“+”)。是这个问题吗?
  • 不,我发布的代码是使用加号作为连接的 SQL 查询。此外,如果是这种情况,它在 sql studio 中也行不通。不过感谢您的回复。
  • 你用什么来获取 PHP 中返回的记录数?
  • 您确定两次都执行完全相同的查询吗?
  • 它似乎应该是:on a_table.hostname LIKE '%' + r_table.Hostname + '%' OR a_table.hostname like '%' + r_table.Name + '%'(在您的查询中,'%'+ 放错了位置。)

标签: php sql-server adodb


【解决方案1】:

我测试了将查询编写为存储过程,但它仍然在 php.ini 中报告错误。最终我发现,因为我有一些带有空值的列,PHP 正在奇怪地读取它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    相关资源
    最近更新 更多