查询在 SQL Server 上运行,但不使用 PHP

Posted

技术标签:

【中文标题】查询在 SQL Server 上运行,但不使用 PHP【英文标题】:Query runs on SQL Server but doesn't with PHP 【发布时间】:2018-11-02 17:12:00 【问题描述】:

我为 SQL Server 编写了一个 SQL 查询,它在 SQL Server Management Studio 中运行良好。但是,当我在我的 php 代码中运行相同的查询时,它会返回错误“'=' 处的语法不正确”。我运行了不同的查询,之前运行良好。

$SQL = "SELECT MAX(EventTime) AS EventTime, UserID
    FROM [Net2Events].[dbo].[Events] e
    WHERE EventType = 20 AND
    Address = 5044830 AND
    NOT EXISTS (Select Max(EventTime) AS EventTime
                FROM [Net2Events].[dbo].[Events] e2
                WHERE  Address = 5042486 AND
                e2.EventTime > e.EventTime AND
                e2.UserId = e.UserId AND
                EventType = 20
                GROUP BY UserId)
    GROUP BY UserID";

【问题讨论】:

您是如何尝试运行查询的? $results = sqlsrv_query($conn, $SQL); 请修改您的帖子并添加您收到的准确和完整的消息。 目前这是我掌握的关于该问题的唯一信息。直到星期一我才能发布完整的错误行 那么,这个问题就没法回答了。 【参考方案1】:

尝试像这样运行查询:

$result = mssql_query('SELECT MAX(EventTime) AS EventTime, UserID
FROM [Net2Events].[dbo].[Events] e
WHERE EventType = 20 AND
Address = 5044830 AND
NOT EXISTS (Select Max(EventTime) AS EventTime
            FROM [Net2Events].[dbo].[Events] e2
            WHERE  Address = 5042486 AND
            e2.EventTime > e.EventTime AND
            e2.UserId = e.UserId AND
            EventType = 20
            GROUP BY UserId)
GROUP BY UserID');

【讨论】:

我使用的是 sqlsrv,而不是 mssql :/ 哦,开枪,我的疏忽。您是否有理由使用 sqlsrv?【参考方案2】:

尝试将“地址”列的所有实例括在方括号中。这是一个 SQL Server 关键字,可能会使驱动程序感到困惑。

$SQL = "SELECT MAX(EventTime) AS EventTime, UserID
    FROM [Net2Events].[dbo].[Events] e
    WHERE EventType = 20 AND
    [Address] = 5044830 AND
    NOT EXISTS (Select Max(EventTime) AS EventTime
                FROM [Net2Events].[dbo].[Events] e2
                WHERE  [Address] = 5042486 AND
                e2.EventTime > e.EventTime AND
                e2.UserId = e.UserId AND
                EventType = 20
                GROUP BY UserId)
    GROUP BY UserID";

【讨论】:

我会在星期一尝试的第一件事!希望我有一个远程连接设置:/【参考方案3】:

尝试将所有内容放在一行中。我知道它看起来很糟糕,但它会帮助您了解是否需要以不同的方式处理多行上的字符串。

$SQL = "SELECT MAX(EventTime) AS EventTime, UserID FROM [Net2Events].[dbo].[Events] e WHERE EventType = 20 AND Address = 5044830 AND NOT EXISTS (Select Max(EventTime) AS EventTime FROM [Net2Events].[dbo].[Events] e2 WHERE  Address = 5042486 AND e2.EventTime > e.EventTime AND e2.UserId = e.UserId AND EventType = 20 GROUP BY UserId) GROUP BY UserID";

如果它有效,那么您已经缩小了问题的范围。您可以尝试在每行末尾添加一个空格。

【讨论】:

以上是关于查询在 SQL Server 上运行,但不使用 PHP的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 查询。用户存在于另一个表中但不存在用户的位置

如何从 PowerShell 运行 SQL Server 查询?

使用 wcf 对 sql server 运行查询时出现奇怪的错误

MS Access 2007 查询不在 SQL Server 2008 上运行

SQL Server 在地理列上返回错误

使用 RODBC 和 MS SQL Server 的长时间运行查询超时