PHP Oracle SQL Выберите дату to_char

0

Я осознаю; "Warning: oci_execute(): ORA-00904: "JAN": invalid identifier ", когда я пытаюсь выполнить эти команды:

function stime($conn3, $time){

    $result = oci_parse($conn3, "SELECT TO_CHAR($time, 'mm/dd/yyyy') FROM MON_EVENTS")or die(oci_error());
    oci_execute($result);
}

STIME также является полем даты в базе данных.

Я STIME поле STIME в $time as stime($row_oci['STIME']).

  • 0
    Можете ли вы проверить свой формат даты? Похоже, у вас есть формат, который содержит Jan который должен быть MON в строке dateformat
  • 0
    Что именно ты пытаешься сделать? Зачем вам использовать запрос, чтобы попытаться отформатировать значение переменной PHP?
Показать ещё 1 комментарий
Теги:
ora-00904

2 ответа

2

Вы были укушены интерполяцией строк PHP:

$result = oci_parse($conn3, "SELECT TO_CHAR($time, 'mm/dd/yyyy') FROM MON_EVENTS")or die(oci_error());
//                                          ^^^^^

$time заменяется содержимым, преобразованным в строку, и перед передачей значения функции oci_parse. Поскольку строковое представление даты может содержать пробелы, буквы, / ,..., это смущает парсер Oracle SQL, который сообщает ORA-00904: Invalid identifier.

Я бы предложил вместо этого использовать параметр привязки. Это гораздо менее подвержено ошибкам - и гораздо безопаснее:

$result = oci_parse($conn3, "SELECT TO_CHAR(:time, 'mm/dd/yyyy') FROM MON_EVENTS");
oci_bind_by_name($result, ':time', $time);
  • 0
    Сильвен, спасибо! Это избавило от ошибки неверного идентификатора. Но это все еще ничего не повторяет. Когда я возвращаю oci_bind_by_name ($ result, ': time', $ stime); это просто эхо 1.
  • 0
    Я понял, почему это возвращалось 1. Это возвращало совпадение на каждом ряду. Я не извлекал данные из массива и не повторял это. Я решил проблему и поставил ответ ниже.
0

$ id = $ row_oci ['ID'];
$ result = oci_parse ($ conn2, "SELECT TO_CHAR (STIME, 'MON/DD/YY hh24: mm: ss') FROM MON_EVENTS WHERE ID = $ id");
oci_execute ($ результат);
while ($ row_result = oci_fetch_array ($ result)) {
эхо "". $ row_result ['0']. "";}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню