PHP Oracle SQL选择日期to_char

时间:2015-01-26 18:04:02

标签: php oracle ora-00904

我得到了; "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字段传递给$time as stime($row_oci['STIME']).

2 个答案:

答案 0 :(得分:2)

您被PHP string interpolation咬了一次:

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

$time被其内容转换为字符串替换 - 而将值传递给oci_parse函数之前。由于日期的字符串表示形式可能包含空格,字母/,...它会混淆报告ORA-00904: Invalid identifier的Oracle SQL解析器。

对于我自己,我建议改用bind参数。这更不容易出错 - 而much more safe

$result = oci_parse($conn3, "SELECT TO_CHAR(:time, 'mm/dd/yyyy') FROM MON_EVENTS");
oci_bind_by_name($result, ':time', $time);

答案 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']。“”;}}