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

Oracle SQL查询及PHP逻辑问题:else语句未触发

问题解决:Oracle查询无匹配时else语句未生效

问题概述

通过NIK字段查询Oracle数据库MASTER_KRY表的NAMA字段,当NIK无匹配数据时,预期触发else语句返回指定提示,但实际返回空数组[]而非提示文本;匹配时可正常返回[{"NAMA":"Galeh S"}]。

数据库结构:

NIKNAMA
94878Alfian U
98345Galeh S

问题根源

原代码中用oci_execute($eksekusi)的返回值$cek判断是否有数据,但oci_execute仅返回布尔值——只要SQL语句合法可执行,无论结果集是否为空,都会返回true。因此$cek > 0始终为真,永远不会进入else分支。

修正后的代码

<?php
include ("koneksi.php");

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    $NIK = $_POST["NIK"];
    // 注意:存在SQL注入风险,建议使用绑定变量(见下方说明)
    $query = "SELECT NAMA FROM MASTER_KRY WHERE NIK = '$NIK'";
    $eksekusi = oci_parse($conn, $query);
    $cek = oci_execute($eksekusi);
    
    if($cek){
        $response = array();
        while($ambil = oci_fetch_object($eksekusi)){
            $F["NAMA"] = $ambil->NAMA;
            array_push($response, $F);
        }
        // 遍历完成后检查结果集是否为空
        if(empty($response)){
            $response = "Data not available";
        }
    } else {
        $response = "Query execution failed";
    }
}
else{
    $response = "Response Error";
}
echo json_encode($response);
oci_close($conn);
?>

关键修正说明

  1. 移除$cek > 0的错误判断,直接用if($cek)验证SQL执行是否成功
  2. 在结果集遍历结束后,通过empty($response)检查是否有匹配数据,为空则设置指定提示
  3. 安全提示:原代码存在SQL注入风险,建议改用Oracle绑定变量写法,示例如下:
// 替换原查询与执行代码段
$query = "SELECT NAMA FROM MASTER_KRY WHERE NIK = :nik";
$eksekusi = oci_parse($conn, $query);
oci_bind_by_name($eksekusi, ':nik', $NIK);
$cek = oci_execute($eksekusi);

内容的提问来源于stack exchange,提问作者Farrasta K S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:40:26