OCI8 OCI_FECTH_ARRAY не возвращает никаких значений, никаких ошибок

Привет, я запускаю простой оператор SQL для извлечения данных и отображения с помощью OCI_FETCH_ARRAY() без везения. PHP не регистрирует никаких ошибок в error_log или не показывает сообщения об ошибке, а показывает только пустую страницу.

Определение таблицы приведено ниже:

Ниже приведен SQL, и я могу запустить разработчика SQL, чтобы получить соответствующие данные:

$sql="SQL Here";

Обработка ошибок при выполнении функций OCI_PARSE и OCI_EXECUTE ниже:

$stid = oci_parse($conn,$sql);

$error_msg_conn= oci_parse($conn,$sql);

if (!$error_msg_conn) {
  $e = oci_error($conn); 
  echo htmlentities($e['message']);
}

$error_msg_stmt = oci_execute($stid);

if (!$error_msg_stmt) {
  $e = oci_error($stid); 
  echo htmlentities($e['message']);
}

Код для отображения записей из набора результатов ниже:

while (($row = oci_fetch_array($stid,OCI_RETURN_NULLS+OCI_BOTH))==TRUE) {

                echo "<td>".$row[0]."</td>";
                echo "<td>".$row[1]."</td>";
                echo "<td>".$row[2]."</td>";
                echo "<td>".$row[3]."</td>";
                echo "<td>".$row[4]."</td>";
                echo "<td>".$row[5]."</td>";
                echo "<td>".$row[6]."</td>";
                echo "<td>".$row[7]."</td>";
                echo "<td>".$row[8]."</td>";
                echo "<td>".$row[9]."</td>";
                echo "<td>".$row[10]."</td>";
                echo "<td>".$row[11]."</td>";
                echo "<td>".$row[12]."</td>\n";
                echo "</tr>\n";
}
echo "</table>\n";

oci_free_statement($stid);
oci_close($conn);

?>

Любая идея, почему я ничего не вижу на выходе PHP? Даже ошибок в error_log нет?

Спасибо.


person Community    schedule 26.10.2016    source источник
comment
Вы вообще видите выход?   -  person bassxzero    schedule 26.10.2016
comment
Я вижу только напечатанные заголовки html, которые находятся вне цикла oci_fetch_array(). Ничего больше. Без ошибок ничего.   -  person    schedule 26.10.2016
comment
Вы видите начальный тег <table> в исходном коде?   -  person bassxzero    schedule 26.10.2016
comment
Да, весь HTML печатается нормально. Странно, что я могу запустить тот же sql на sql-разработчике и получить данные. Кроме того, все остальные страницы php работают нормально.   -  person    schedule 26.10.2016
comment
попробуйте просто while($row = oci_fetch_array($stid,OCI_BOTH)) {   -  person bassxzero    schedule 26.10.2016
comment
это сработало для вас?   -  person bassxzero    schedule 26.10.2016
comment
Такой же. Не выводит ошибок.   -  person    schedule 26.10.2016
comment
ему не нравится предложение where. PHP извлекает данные без предложения where. есть идеи, почему OCI8 может вызвать проблему с WHERE TRADE_DATE=TO_CHAR(SYSDATE, 'DD-MON-YY')?   -  person    schedule 27.10.2016


Ответы (1)


в своем комментарии выше вы сказали

ему не нравится предложение where. PHP извлекает данные без предложения where. есть идеи, почему OCI8 может вызвать проблему с «WHERE TRADE_DATE = TO_CHAR (SYSDATE, 'DD-MON-YY')»?

хорошо, потому что ваш столбец TRADE_DATE - это DATE, а не VARCHAR

desc IRINS_COMPOSITE_INSTRUMENTS
Name                Null     Type          
------------------- -------- ------------- 
...
TRADE_DATE                   DATE

поэтому TO_CHAR(SYSDATE, 'DD-MON-YY') создает STRING, который затем преобразуется обратно в DATE, используя вашу текущую настройку NLS_DATE_FORMAT.

предполагая, что вы просто пытаетесь игнорировать компонент времени SYSDATE, попробуйте просто изменить его на

WHERE TRADE_DATE=TRUNC(SYSDATE)

предполагая, что это исправляет это, это не имеет ничего общего с OCI или OCI_FETCH_ARRAY()

person ShoeLace    schedule 27.10.2016
comment
Попробую @ShoeLace ваше решение, но когда я делаю WHERE TRADE_DATE=TO_CHAR(CURRENT_DATE), все работает нормально. - person ; 27.10.2016
comment
это может сработать.. но это непредсказуемо.. сравните дату с датой (а не дату с char), и все будет в порядке. - person ShoeLace; 27.10.2016