Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ORA-01843:从html向oracle数据库插入输入时不是有效的月份错误_Php_Html_Oracle_Stored Procedures - Fatal编程技术网

Php ORA-01843:从html向oracle数据库插入输入时不是有效的月份错误

Php ORA-01843:从html向oracle数据库插入输入时不是有效的月份错误,php,html,oracle,stored-procedures,Php,Html,Oracle,Stored Procedures,我在尝试向Oracle SQL Developer数据库中插入时间戳输入时遇到问题。我有一个名为userappt的表,名为appt\u date的列是一个时间戳值。然后,我有一个名为insertapptpro的存储过程,它将在名为insertappt.php的php文件中调用,作为名为userappt.html的html表单文件的操作。我尝试插入新约会,但出现错误警告:oci_execute():ORA-01843:不是有效月份ORA-06512,并且未向我的数据库返回任何内容 这是我的表和存储

我在尝试向Oracle SQL Developer数据库中插入时间戳输入时遇到问题。我有一个名为userappt的表,名为appt\u date的列是一个时间戳值。然后,我有一个名为insertapptpro的存储过程,它将在名为insertappt.php的php文件中调用,作为名为userappt.html的html表单文件的操作。我尝试插入新约会,但出现错误
警告:oci_execute():ORA-01843:不是有效月份ORA-06512
,并且未向我的数据库返回任何内容

这是我的表和存储过程代码:

create table appt
(
appt_id varchar(15) primary key,
pet_name varchar(100),
purpose varchar(50),
appt_date timestamp
);

create or replace procedure insertapptPro(
p_name appt.pet_name%type, p_purpose appt.purpose%type, p_date appt.appt_date%type)
is
begin
insert into appt(pet_name, purpose, appt_date)
values (p_name, p_purpose, p_date);
end;
/

declare 
a varchar(100);
b varchar(50);
c timestamp;
begin
a := 'Jack Jack';
b := 'Rear bleeding';
c := '15-Dec-2019 09:00';
insertapptpro(a,b,c);
end;
/

这是我的文件insertappt.php的php代码:

$name=$\u POST['PET\u name'];
$purp=$_POST['PURPOSE'];
$date=$_POST['APPT_date'];
$query1='BEGIN INSERTAPPTPRO(:宠物名称,:目的,:应用日期);"完";;
$result=oci_parse($connection,$query1);
oci_按名称绑定($result,':PET_name',$name);
oci按名称绑定($result,':purple',$purp);
oci按名称绑定($result,':APPT_DATE',$DATE);
oci_执行($result);
如果(oci_fetch($result)==0)
{
echo“window.alert('Booked Successfully!')”;window.location.href='/system/userappt.php';
}
其他的
{
echo“window.alert('Register Failed');”;
}
?>
最后,我的userappt.html文件的html表单代码:



宠物名:
目的:
预约日期及时间:
我对在html中使用datetime local和在oracle中使用timestamp还比较陌生,所以我希望能从你们身上学到一些东西


你能给我们展示一个你试图插入的日期格式的例子吗?当然,我在文章的末尾添加了一个截图。很可能这是NLS_date_格式的问题:你的过程希望最后一个参数是时间戳格式,Oracle尝试将你发送的字符串转换为该格式,因此如果你输入的字符串是这样的话与会话的NLS_DATE_格式不对应,您将得到一个转换错误,就像您显示的那样。因此,请确保屏幕上和会话中使用的时间戳格式。这是否意味着我必须更改html文件中日期的输入类型?或者是否有其他方法将它们转换为相同的格式如果存储过程需要时间戳,您可以尝试
$date=strotime($\u POST['APPT\u date'])
$name = $_POST['PET_NAME'];
$purp = $_POST['PURPOSE']; 
$date = $_POST['APPT_DATE'];


    $query1 = 'BEGIN INSERTAPPTPRO(:PET_NAME, :PURPOSE, :APPT_DATE);END;';
    $result = oci_parse($connection, $query1);

    oci_bind_by_name($result, ':PET_NAME', $name);
    oci_bind_by_name($result, ':PURPOSE', $purp);
    oci_bind_by_name($result, ':APPT_DATE', $date);

    oci_execute($result);

    if (oci_fetch($result)==0) 
    {
        echo "<script type=\"text/javascript\">window.alert('Booked Successfully!')";window.location.href='/system/userappt.php';</script>";
    }

    else
    {
        echo "<script type=\"text/javascript\">window.alert('Register Failed');</script>";
    }
?>
<form class="" action="insertappt.php" method="post">
          <p>
        Pet Name: <input type="text" name="PET_NAME" placeholder="Patient Name" class="inputtxt" required>
        Purpose: <input type="text" name="PURPOSE" placeholder="Purpose" class="inputtxt" required>
        Appointment date and time: <input type="datetime-local"  name="APPT_DATE" placeholder="Appointment date and time" class="inputtxt" required>
        <input type="submit" value="Book" class="subbtn">
        </form>