PHP Oracle OCI8 查询 keep/handle 数组中的空列

PHP Oracle OCI8 query to keep/handle null columns in array

我有以下 sql 查询..我将内容映射到 kendo 前端 table..

$sql = "SELECT big_id, fac_ident, lg_name, basic_tp, catc_vd, address, assoc_city, latitude, longitude, assoc_cnty, assoc_st, time_zone, faa_reg, ato_sa, ato_td, fema_reg, ops_hrs, prim_ph, atc_level, tower_type, manager, sat_phone_num, td_mgr, to_dist, tod_mgr, stof_fac, ops_status, crt_rl FROM myCoolApp.big_id";

问题是..在数据库中没有找到任何关联值的列,没有返回任何值,唉,只是从响应数组中完全省略了..即在 ops_hrs 上面没有值找到了,所以我的数组中完全省略了它 - 我需要它仍然存在,只是空白。

我希望响应仍然显示数组中的列,即使它的值为 empty;理想情况下只需添加一个空白 space " "'N/A' 甚至。因为我不希望在我的数组和前端中删除空列。

我剩下的 PHP/sql...

        $stid = oci_parse($this->db, $sql);
        oci_execute($stid); 
            
        $myData = array();

        while ($list = oci_fetch_array($stid, OCI_ASSOC)) {
            array_push($myData, $list);
        }
    
        header('Content-Type: application/json');
        echo "{\"data\":" .json_encode($myData). "}";

我在这里错过了什么?我需要使用 PHP/sql.

以编程方式处理它

从 SQL(和 Oracle)开始,您可以使用 NVL 函数,如果 returns 列值存在,或者它的“替代”,如果不存在。

例如,在此查询中 comm 列的值为 NULL:

SQL> select ename, comm from emp where empno = 7369;

ENAME            COMM
---------- ----------
SMITH

你会

SQL> select nvl(ename, 'N/A') as ename,
  2         nvl(comm , 0    ) as comm
  3  from emp
  4  where empno = 7369;

ENAME            COMM
---------- ----------
SMITH               0

SQL>

注意列的数据类型。如果是字符串,NVL也应该是return字符串(比如'N/A');如果是数字,就让它return一个数字(比如0),等等

没有“通用”的方法,因此您必须将 NVL 应用于您选择的所有列。

使用OCI_RETURN_NULLS:

while ($list = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
    array_push($myData, $list);
}

参见PHP OCI8 oci_fetch_array documentation