2016-04-03 30 views
0

我試圖做一個簡單的汽車租賃系統中的一個表:汽車如何檢索使用PHP的oracle存儲過程中的錯誤?

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向用戶顯示'同一輛車存在。請再次檢查。'我應該怎麼做?

回答

0

我找到了解決方案。我用PDOExeception :: errorInfo中下面的代碼:

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

$e->errorInfo[1] == '1'需要檢查從Oracle的錯誤代碼。