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);
}
我有以下 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);
}