Php 一般错误:1843 OCISMTEXECUTE:ORA-01843:不是有效月份(ext\pdo_oci\oci_statement.c:148)'

Php 一般错误:1843 OCISMTEXECUTE:ORA-01843:不是有效月份(ext\pdo_oci\oci_statement.c:148)',php,oracle,pdo,Php,Oracle,Pdo,我正在尝试使用pdo插入到oracle表中。这是一个错误: 致命错误:未捕获的异常“PDOException”带有消息 'SQLSTATE[HY000]:一般错误:1843 OCISMTEXECUTE:ORA-01843:不是 有效月份'ext\pdo_oci\oci_statement.c:148'in D:\xampp\htdocs\ipack\insertstatus.php:60堆栈跟踪:0 D:\xampp\htdocs\ipack\insertstatus.php60:PDOStat

我正在尝试使用pdo插入到oracle表中。这是一个错误:

致命错误:未捕获的异常“PDOException”带有消息 'SQLSTATE[HY000]:一般错误:1843 OCISMTEXECUTE:ORA-01843:不是 有效月份'ext\pdo_oci\oci_statement.c:148'in D:\xampp\htdocs\ipack\insertstatus.php:60堆栈跟踪:0 D:\xampp\htdocs\ipack\insertstatus.php60:PDOStatement->execute1 {main}在第60行的D:\xampp\htdocs\ipack\insertstatus.php中抛出

这是我的代码:

$today = date("d-m-Y");
$stmt = $dbh->prepare("INSERT INTO PRTJOBSTATUS (INTJOBNO,SLNO,OPDATE,OPERTYPE,OPUSER,REMARKS,STATUSCODE,STATDATE) 
    values (:intjn,:sn,:opdt,:optype,:opusr,:rmks,:stcd,:stdt)");
    $stmt->bindParam(':intjn',$intjobno);
    $stmt->bindParam(':sn',$slno);
    $stmt->bindParam(':opdt',$today);
    $stmt->bindParam(':optype',$optype);
    $stmt->bindParam(':opusr',$opuser);
    $stmt->bindParam(':rmks',$remarks);
    $stmt->bindParam(':stcd',$statuscode);
    $stmt->bindParam(':stdt',$today);
    if($stmt->execute()) {
      echo '1 row has been inserted';  
    }
    $dbh = null;

您正在向列STATDATE中插入。我想这将是日期类型。因此,必须将日期对象传递到insert语句中

更改$today变量以返回以下格式的字符串“DD-MON-YYYY”,例如2015年12月31日 然后将insert语句更改为以下内容:

"INSERT INTO PRTJOBSTATUS (INTJOBNO,SLNO,OPDATE,OPERTYPE,OPUSER,REMARKS,STATUSCODE,STATDATE) 
values (:intjn,:sn,:opdt,:optype,:opusr,:rmks,:stcd,TO_DATE(:stdt,'DD-MON-YYYY'))"

这不是相关的代码,没有第60行不是php专家,但可以看出错误即将到来,因为输入日期列之一的月份无效。您可以使用默认的日期格式进行尝试,即DD MON RRError位于$stmt->execute statement我将日期格式更改为date'd-M-y',现在工作正常。非常感谢你,福兹镇。我将日期格式改为日期“d-M-y”,现在工作正常。谢谢。