У меня есть этот запрос:
$sql = "SELECT CPACK, ('[' || CPACK || '][' || REPLACE(UPPER(DESC_PACK),UPPER(' ".substr(str_replace($battlezone," ",""),0,-1)."'),'') || ']') CPACKITEM
FROM p_product_indihome_valid
where (1=1) and cpack in (select cpack from p_paket where JENIS = 'A' and valid = '1' and paket like '%~".$paket."~%' and
id_rule in (select id_rule from p_paket_rule where (";
for($i=0;$i<count($param);$i++){
$sql2 .= " or (MTARGET = '".$paramName[$i]."' and REGEXP_LIKE (REPLACE(mvalue,'&','dan'),'~".str_replace('&','dan',$param[$i])."~|0'))";
}
$sql .= ltrim($sql2,' or');
$sql .= ") group by id_rule having count(mtarget) = 3)) group by CPACK,DESC_PACK ORDER BY DESC_PACK";
$stid = oci_parse($this->_conn, $sql);
$r = oci_execute($stid);
print_r($sql);
Это показывает:
SELECT CPACK, ('[' || CPACK || '][' || REPLACE(UPPER(DESC_PACK),UPPER(' '),'') || ']') CPACKITEM
FROM p_product_indihome_valid
where (1=1) and cpack in (select cpack from p_paket where JENIS = 'A' and valid = '1' and paket like '%~1~%' and
id_rule in (select id_rule from p_paket_rule where ((MTARGET = 'SUBLAYANAN' and REGEXP_LIKE (REPLACE(mvalue,'&','dan'),'~DCS - UCS II~|0')) or (MTARGET = 'LAYANAN' and REGEXP_LIKE (REPLACE(mvalue,'&','dan'),'~DCS~|0')) or (MTARGET = 'SOCIO' and REGEXP_LIKE (REPLACE(mvalue,'&','dan'),'~Lain-lain~|0'))) group by id_rule having count(mtarget) = 3)) group by CPACK,DESC_PACK
ORDER BY DESC_PACK;
Я запускаю запрос в SQL Developer, и он показывает этот результат:
cpack | citem
USEE84 [USEE84][ADDITIONALSETUPBOXUSEETV]
C15062 [C15062][CS-INDIHOMEJOINPROMOVISACREDITCARDINTERNET]
C15061 [C15061][CS-INDIHOMEJOINPROMOVISACREDITCARDPHONE]
VOICE [VOICE][FEATUREVOICE]
Но когда я показываю результат запроса с print_r($stid);
, он показывает нулевые значения. Я не знаю, где ошибка.
В настоящее время ваш код не получает набор результатов.
Вот как получить набор результатов с помощью oci_fetch_array
и получить желаемый результат, который вы ищете - добавьте это в oci_fetch_array
вашего кода:
$results = [];
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS)) {
$results[] = $row;
}
print_r($results);
oci_fetch_array - возвращает следующую строку из запроса как ассоциативный или числовой массив
Использование: массив oci_fetch_array (ресурс $ statement [, int $ mode])
Документация и другие примеры ниже: