Php ORA-01847插入到oci执行的日期时
我试图在日期字段中插入一个用户输入的日期(作为POST变量),并不断获取ORA-01847。这是我到目前为止得到的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
$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中起作用。我猜你可能有其他角色导致了这个问题。