查询在 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 运行查询时出现奇怪的错误