Ms Access查询表达式缺少运算符SQL语法错误,PHPRunner更新表报错
问题根因
UPDATE语句括号不匹配:WHERE子句起始使用了2个左括号((,但末尾仅闭合了内部的2个括号,缺少1个外层右括号,直接触发SQL语法错误- Access数据库的日期字段值需要用
#包裹,直接拼接日期值不符合Access的SQL语法要求 - PHP数组键名未加引号:
$values[DateField1]属于错误写法,PHP会将DateField1识别为未定义常量,实际取值异常 - 原SELECT语句未做日期筛选,会返回该用户所有日期的分组统计第一条结果,不是对应日期的总工时,会导致更新的数据错误
修正后代码
$mykey = $values["OwnerID"]; $mykey1 = $values["DateField1"]; global $conn; // 新增日期筛选,仅统计目标日期的工时 $str = "select SUM(Hours) AS [Hrs] FROM Attendance WHERE OwnerID='{$mykey}' AND DateField1=#{$mykey1}# Group by DateField1"; $rs = db_query($str); $value = db_fetch_numarray($rs); // 空值判断,避免无考勤记录时更新为空 $total = !empty($value[0]) ? $value[0] : 0; // 补全括号、日期加#包裹、修正数组键写法 $strUpdate = "update HrsOT set `DailyHrs`='{$total}' Where (OwnerID='{$mykey}' AND Date=#{$values["DateField1"]}#)"; db_exec($strUpdate,$conn); return true;
补充说明
如果Date是Access的保留字,执行仍报错的话,可以把更新语句里的Date改为[Date]避免保留字冲突。
内容的提问来源于stack exchange,提问作者Derek
相关产品推荐
相关产品推荐

