You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL AND OR语句语法错误求助:排查SQL查询问题

问题分析与修正

咱们一步步来排查你代码里的问题,你遇到的语法错误和逻辑偏差主要有这几个关键点:

1. COUNT (*) 的语法错误

MySQL 里COUNT函数和括号之间不能有空格,正确写法是COUNT(*)。你写的COUNT (*)会被 MySQL 判定为非法语法,这也是错误提示里最先指出的问题。

2. 字符串类型字段值未加引号

你的Time字段值(比如11PM、11:30PM)属于字符串,直接拼进 SQL 语句会被 MySQL 当成无效标识符;另外如果Date字段是字符串类型,哪怕是2018-03-15这种日期格式,也必须用单引号包裹——否则 MySQL 会把2018-03-15解析成2018减3减15的算术表达式,完全偏离你的预期。

3. AND/OR 的优先级逻辑错误

SQL 里AND的优先级高于OR,你原语句的 WHERE 子句会被 MySQL 自动重新分组,变成:

Date= $SearchDate AND Time= $PlusHour OR Time= $Plus30 AND JobStatus= '1' OR JobStatus= '3'

这和你想实现的「日期匹配,且时间是指定的两个值之一,且状态为1或3」的逻辑完全不符,必须用括号把OR的条件分组,明确逻辑关系。

修正后的代码

先给你修正了语法和逻辑的基础版本:

$PlusHour = date('gA', strtotime("+1 hours"));
$Plus30 = date('g:30A', strtotime("+1 hours"));

// 如果Date字段是DATE类型,直接用CURDATE()函数无需引号;如果是字符串类型,改用带引号的日期字符串
$SearchDate = "CURDATE()";

// 修正COUNT语法、给字符串字段值加引号、用括号分组OR条件
$sqlCount = "SELECT COUNT(*) FROM ServiceTickets 
             WHERE Date = $SearchDate 
             AND (Time = '$PlusHour' OR Time = '$Plus30')
             AND (JobStatus = '1' OR JobStatus = '3')";

$CountQuery = mysqli_query($db_conx, $sqlCount) or die("Error: ".mysqli_error($db_conx));
$rowCount = mysqli_fetch_row($CountQuery);

如果你的Date字段是 VARCHAR 等字符串类型,$SearchDate要改成带引号的格式:

$SearchDate = "'" . date('Y-m-d') . "'";

另外更安全的做法是使用参数化查询(避免 SQL 注入风险),示例如下:

$PlusHour = date('gA', strtotime("+1 hours"));
$Plus30 = date('g:30A', strtotime("+1 hours"));
$today = date('Y-m-d');

$sqlCount = "SELECT COUNT(*) FROM ServiceTickets 
             WHERE Date = ? 
             AND (Time = ? OR Time = ?)
             AND (JobStatus IN ('1', '3'))";

$stmt = mysqli_prepare($db_conx, $sqlCount);
mysqli_stmt_bind_param($stmt, "sss", $today, $PlusHour, $Plus30);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $count);
mysqli_stmt_fetch($stmt);
$rowCount = [$count];

内容的提问来源于stack exchange,提问作者Micha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:14:02