Php ORA-01847插入到oci执行的日期时

Php ORA-01847插入到oci执行的日期时,php,oracle,oracle-call-interface,Php,Oracle,Oracle Call Interface,我试图在日期字段中插入一个用户输入的日期(作为POST变量),并不断获取ORA-01847。这是我到目前为止得到的 $name = strtoupper(trim($_POST['name'])); $dob = date('d-M-y', strtotime($_POST['dob'])); $query = "INSERT INTO TEST_TABLE (TABID, TABNAME, DOB, CREATEDBY) VALUES (SEQ_TAB_TABID.NE

我试图在日期字段中插入一个用户输入的日期(作为POST变量),并不断获取ORA-01847。这是我到目前为止得到的

    $name = strtoupper(trim($_POST['name']));
    $dob = date('d-M-y', strtotime($_POST['dob']));
    $query = "INSERT INTO TEST_TABLE (TABID, TABNAME, DOB, CREATEDBY) VALUES (SEQ_TAB_TABID.NEXTVAL, :1, TO_DATE(:2, 'DD-MM-YY'), :3)";
    $ins = array($name, $dob, $_SESSION['usrid']);
    $conn = oci_connect($username, $password, $constr);
    $stid = oci_parse($conn, $query);
    $count = 1;
    foreach ($ins as $i) {
        oci_bind_by_name($stid, sprintf(':%d', $count), $i);
        $count++;
    }
    $exec = oci_execute($stid);
我得到的用户输入格式为2015年8月29日$\u POST['dob']

我一直得到ORA-01847:月日必须介于1和月底之间

我已尝试打印最终的dob,并打印出2015年8月29日。当我使用SQL Developer使用相同的查询和插入时,它可以完美地工作

我甚至尝试了以下查询的非绑定版本:

    $query = sprintf("INSERT INTO TEST_TABLE (TABID, TABNAME, DOB, CREATEDBY) VALUES (SEQ_TAB_TABID.NEXTVAL, %s, TO_DATE(%s, 'DD-MM-YY'), %d)", escapeshellarg($name), escapeshellarg($dob), $_SESSION['usrid'])
在这种情况下,我得到了ORA-01858:在需要数字的地方找到了一个非数字字符

同样,当我使用SQL developer运行该查询时,它可以正常工作


我知道我在这里遗漏了一件小事,但这是我第一次使用PHP和Oracle,非常感谢您的帮助。

尝试用正确的格式解析日期:

INSERT INTO TEST_TABLE(TABID, TABNAME, DOB, CREATEDBY)
    VALUES (SEQ_TAB_TABID.NEXTVAL, :1, TO_DATE(:2, 'MM/DD/YYYY'), :3)

如果用户输入的格式是MM/DD/yyy,那么为什么要使用DD-MM-YY格式来解析它?现在我得到了ORA-01821:无法识别的日期格式。输入的日期是08/29/2015@AbhinavMathur . . . 这在sqlfiddle中起作用。我猜你可能有其他角色导致了这个问题。