2016-04-03 3 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からエラーコードをチェックする必要があります。

関連する問題