如何使用php从oracle中的存储过程中检索错误


How to retrieve error from stored procedure in oracle using php?

我正在尝试用其中一个表制作一个简单的租车系统:car

CREATE TABLE "WILSON"."CAR" 
(   "CAR_ID" VARCHAR2(20 BYTE), 
    "CAR_PLATE" VARCHAR2(7 BYTE) NOT NULL ENABLE, 
    "CAR_MODEL" VARCHAR2(30 BYTE) NOT NULL ENABLE, 
        "CAR_COLOR" VARCHAR2(30 BYTE) NOT NULL ENABLE, 
        "CAR_STATUS" VARCHAR2(30 BYTE) NOT NULL ENABLE, 
        "CAR_CATEGORY" VARCHAR2(15 BYTE) NOT NULL ENABLE, 
         CONSTRAINT "CAR_STATUS_CHK" CHECK (CAR_STATUS IN ('AVAILABLE','NOT AVAILABLE','MAINTENANCE')) ENABLE, 
         PRIMARY KEY ("CAR_ID"),
         CONSTRAINT "CAR_UNIQUE" UNIQUE ("CAR_PLATE", "CAR_MODEL", "CAR_COLOR")
);

带有插入新车的存储过程:

create or replace procedure insert_car_proc(plateno varchar2, car_model varchar2, color varchar2, cate_id varchar2)
is
begin
      insert into car(car_plate, car_model, car_color, car_category) values (plateno, car_model, color, cate_id);
end;

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $plateno = $_POST['platenoInput'];
    $model = $_POST['modelInput'];
    $color = $_POST['colorInput'];
    $category = $_POST['category'];
//    var_dump($plateno, $model, $color, $category);
    $stmt = $conn->prepare('begin insert_car_proc(?,?,?,?); end;');
    try{
        $stmt->bindParam(1, $plateno);
        $stmt->bindParam(2, $model);
        $stmt->bindParam(3, $color);
        $stmt->bindParam(4, $category);
        $stmt->execute();
        echo 'success';
    }catch(Exception $e){
        echo $e->getMessage();
    }
}

它可以插入新车,但由于我有3列(car_color、car_plate、car_model)的限制,我想使用php检索错误,向用户显示存在的新车。请再次检查。"我该怎么做?

我找到了解决方案。我在PDOExecution中使用了以下代码::errorInfo:

catch(PDOException $e){
        if($e->errorInfo[1] == '1'){
            echo 'Duplicated Car Inserted';
        }
    }

CCD_ 1需要检查来自oracle的错误代码。