基于Oracle数据库的下拉搜索功能开发报错求助
报错信息
SQLSTATE[HY000]: General error: 933 OCIStmtExecute:
ORA-00933: SQL command not properly ended
(ext\pdo_oci\oci_statement.c:157)Notice: Undefined variable: result in
C:\xampp\htdocs\test_Oracle\src\index.php on line 87Warning: Invalid argument supplied for foreach() in
C:\xampp\htdocs\test_Oracle\src\index.php on line 87
问题排查与修复
1. ORA-00933 SQL命令未正确结束
原因:原SQL已包含WHERE WORK_DATE = 20221104,拼接GROUP_NAME过滤条件时,直接追加WHERE GROUP_NAME=:GROUP_NAME会导致SQL语法错误(两个WHERE连续出现)。
修复代码:用AND连接第二个条件,并注意添加空格:
if(isset($_GET['group']) && $_GET['group']){ $sql = $sql. ' AND GROUP_NAME=:GROUP_NAME'; // 补充空格和AND $params= [ 'GROUP_NAME' => $_GET['group'] ]; }
2. Undefined variable: result 及 foreach参数无效
原因:当SQL执行抛出异常时,$result变量未被初始化,但页面后续仍会执行foreach($result),导致变量未定义和参数无效错误。
修复代码:在try块外初始化$result为空数组:
$result = []; // 提前初始化空数组 try{ $params = []; if(isset($_GET['group']) && $_GET['group']){ $sql = $sql. ' AND GROUP_NAME=:GROUP_NAME'; $params= [ 'GROUP_NAME' => $_GET['group'] ]; } $stm = $db->prepare($sql); $stm->execute($params); $result = $stm->fetchAll(PDO::FETCH_ASSOC); }catch(PDOException $e){ echo $e->getMessage(); }
额外优化建议
- 日期值建议用字符串包裹,避免Oracle解析异常:
WHERE WORK_DATE = '20221104' - HTML表格中存在未闭合的
<td>标签,需补全所有闭合标签,否则会导致页面结构错乱:
<tr> <td> <?= $value['MODEL_NAME'] ?></td> <td> <?php echo $value['GROUP_NAME']; ?></td> <td> <?= $value['STATION_NAME']; ?></td> <td> <?= $value['WIP_QTY']; ?></td> <td> <?= $value['PASS_QTY']; ?></td> <td> <?= $value['FIRST_FAIL_QTY']; ?></td> <td> <?= $value['FAIL_QTY']; ?></td> <td> <?= $value['RETEST_QTY']; ?></td> <td> <?= $value['REPASS_QTY']; ?></td> <td> <?= $value['LINE_NAME'] ?></td> </tr>
内容的提问来源于stack exchange,提问作者Thang Đai
相关产品推荐
相关产品推荐

