前提・実現したいこと
指定した条件に合致するデータがあればINSERTを行うようにしたいです。
一度データベースに書き込めたのですが、少し調整を行ってから書き込めなくなってしまいました。
該当部分のコードはほぼ触っていないと記憶しています、エラーコード的に単純なミスかと思い見直し書き直しを行っているのですが一向に治りません。
EMP_DATA
論理名 | 型 | 制約 |
---|---|---|
EMP_ID | NUMBER | NOT NULL |
EMP_PASS | VARCHAR2(20) | |
SEI | VARCHAR2(20) | |
MEI | VARCHAR2(20) | |
BIRTHDAY | DAY |
WORK_TIME
論理名 | 型 | 制約 |
---|---|---|
EMP_ID | NUMBER | NOT NULL |
IN_TIME | DATE | NOT NULL |
BREAK_OUT | DATE | |
BREAK_IN | DATE | |
OUT_TIME | DATE |
発生している問題・エラーメッセージ
Warning: oci_execute(): ORA-00933: SQLコマンドが正しく終了されていません。 php上で実行した場合文字化けしているので、Oracle上で同等の文を実行した際のエラーメッセージを表記しています。
該当のソースコード
PHP
1 $sql = "INSERT INTO WORK_TIME (EMP_ID,IN_TIME) 2 VALUES (:id, SYSDATE) 3 WHERE EXISTS (SELECT * //エラーが表示される行 4 FROM EMP_DATA 5 WHERE EMP_ID = :id AND EMP_PASS = :pass)"; 6 $stid = oci_parse($conn,$sql); 7 oci_bind_by_name($stid, ':id', $id); 8 oci_bind_by_name($stid, ':pass', $pass); 9 oci_execute($stid);
行3でエラーが発生しました。:
ORA-00933: SQLコマンドが正しく終了されていません。
同等の文をOracle上で動かしても同様のエラーが表示されます。
試したこと
構文、テーブル名カラム名の見直し書き直し
値は直接入力ですが、Oracle上で動作確認を行った文
SELECT * FROM WORK_TIME WHERE EXISTS
(SELECT * FROM EMP_DATA WHERE EMP_ID = [値] AND EMP_PASS = [値]);
INSERT INTO WORK_TIME (EMP_ID,IN_TIME)
VALUES ([値], SYSDATE);
上記の文をphp上で変数バインドを使用した場合も動作しました。
SELECT * FROM WORK_TIME WHERE EXISTS
(SELECT * FROM EMP_DATA WHERE EMP_ID = :id AND EMP_PASS = :pass);
INSERT INTO WORK_TIME (EMP_ID,IN_TIME)
VALUES (:id, SYSDATE);
補足情報(FW/ツールのバージョンなど)
os:windows10
DB:Oracle 18c XE
ブラウザ:googlechrome
xmappを使いローカル環境でPHP,Oracle共に同一PCで作動させています。
回答2件
あなたの回答
tips
プレビュー