【问题标题】:mssql_query(): message: Incorrect syntax near ''(severity 15)mssql_query():消息:''(严重性 15)附近的语法不正确
【发布时间】:2015-05-27 07:15:31
【问题描述】:

当我运行我的代码时,我得到了这个错误:

警告:mssql_query():消息:“bstplanning”附近的语法不正确。 (严重性 15)在 /var/www/bstplanning/report/scorecard2.php 第 91 行

警告:mssql_query():一般 SQL Server 错误:检查来自 SQL Server(严重性 15)的消息 /var/www/bstplanning/report/scorecard2.php 第 91 行

我的代码如下所示:

    if ($team != 'All') {
    $sql_team = "users.split = '" . $team . "' AND";
    $sql_user = "users.user_id LIKE '%'";
} else {
    $sql_team = "users.user_id LIKE '%' AND";
    if ($user != 'All') {
        $sql_user = "users.user_id = '" . $user . "'";
    } else {
        $sql_user = "users.user_id LIKE '%'";
    }
}

$sql = "
SELECT 
        Drive.Owner 
        ,ROUND(AVG(CAST(actual AS FLOAT)), 2) as rezult
        ,ROUND(Sum(CAST(Ontime AS FLOAT))/Sum(task_count), 2) as rezult2
       ,ROUND(sum(case when firsta != 'none' then 1 else 0 end)/ROUND(CAST(count(firsta)AS FLOAT),2)*100,2) nones1
       ,ROUND(sum(case when seconda != 'none' then 1 else 0 end)/ROUND(CAST(count(seconda)AS FLOAT),2)*100,2) nones1
       ,ROUND(CAST(count(dock )AS FLOAT),2)/CAST(sum(case when dock = 'yes' then 1 else 0 end)AS FLOAT)*100 as documentavail
       ,(sum(case when dock = 'yes' then 1 else 0 end)+sum(case when dock = 'old' then 1 else 0 end))/count(dock)*100 as documentavail
FROM (
SELECT 
    users.user_name+ ' ' +users.user_surname AS Owner
    ,users.split as test
    ,sc.firstbackup as firsta
    ,sc.secondbackup as seconda
    ,sc.documentation as dock
    ,sc.active as active
    ,(SELECT CASE WHEN non_sc = '1' THEN 'regular' ELSE 'sc' END) as sc_or_non_sc
    FROM
    sc

INNER JOIN
    users
ON sc.user_id = users.user_id

WHERE
     " . $sql_team . "  " . $sql_user . "
) Drive
left join
(
SELECT
     bstplanning.dbo.sc_data.track
    ,bstplanning.dbo.users.split
    ,bstplanning.dbo.sc_data.country
    ,bstplanning.dbo.sc_data.client
    ,bstplanning.dbo.sc_data.task_group
    ,MAX(ISNULL(bstplanning.dbo.users.user_name,'') + ' ' + ISNULL(bstplanning.dbo.users.user_surname,'')) as Owner
    ,AVG(CASE WHEN bstplanning.dbo.sc_data.ontime = 'on time' THEN 100 ELSE 0 END)*COUNT(bstplanning.dbo.sc_data.country) AS Ontime
    ,AVG(CASE WHEN bstplanning.dbo.sc_data.accuracy = 'accurate' THEN 100 ELSE 0 END) AS actual
    ,COUNT(bstplanning.dbo.sc_data.country) AS task_count

FROM 
    bstplanning.dbo.sc_data 

INNER JOIN bstplanning.dbo.users 
    ON bstplanning.dbo.sc_data.user_id = bstplanning.dbo.users.user_id  

WHERE
    bstplanning.dbo.sc_data.date >= '" . $nuo . "' AND bstplanning.dbo.sc_data.date <= '" . $iki . "' AND  " . $sql_team . " " . $sql_user . " bstplanning.dbo.sc_data.actual > 0 AND
    ((bstplanning.dbo.sc_data.ontime='on time' OR bstplanning.dbo.sc_data.ontime = 'late') OR (bstplanning.dbo.sc_data.accuracy='accurate' OR bstplanning.dbo.sc_data.accuracy = 'error'))
    
GROUP BY
     bstplanning.dbo.sc_data.country
    ,bstplanning.dbo.sc_data.client
    ,bstplanning.dbo.sc_data.task_group
    ,bstplanning.dbo.users.split
    ,bstplanning.dbo.sc_data.track
    ) Drive2
    on Drive.Owner=Drive2.Owner
    where sc_or_non_sc ='sc'
    group by
        Drive.Owner
";

我不知道出了什么问题,因为当我在 SQL Server Management 中运行代码时,它运行良好。我认为问题出在 $team 或 $user 上,但我不知道如何解决它。这太疯狂了,当我从选择中删除“Where”时它起作用了。

【问题讨论】:

  • 您检查了$sql 的结果并在 Management Studio 中运行了吗?找出答案的最佳方法是在填写所有变量等时输出$sql,因为现在无法知道第 91 行是什么或错误在哪里,它基本上是大海捞针。
  • “当我在 SQL Server 管理中运行代码时,它工作正常”——这似乎是一个 SQL 语法错误。也许,你在调试时错过了一些东西。您确定您运行的正是在 php 中执行的 SQL 吗?
  • 抱歉没有添加91行,91行包含“$result = mssql_query ($sql);”
  • @user4035 我不这么认为,我多次复制文本,尝试更改变量,但似乎有些东西不想工作。我认为这个问题可能与左连接有关,因为它们是两个不同的表。
  • 就在像 91 一样执行实际查询执行之前,添加一个echo sql; 并发布查询。

标签: php sql sql-server left-join


【解决方案1】:

我发现了问题所在。我不知道为什么,但是当我删除 $team, $user from left join where conditions it works.

【讨论】:

    猜你喜欢
    • 2017-08-25
    • 2018-06-19
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 1970-01-01
    • 2019-06-30
    • 2016-10-28
    • 2019-12-02
    相关资源
    最近更新 更多