私の要求は実現可能ですか?MySql条件付き挿入
私は管理者のパスワードで挿入を保護したいと思います。
INSERT INTO `user` (`id`, `pw`, `name`) VALUES (?,?,?) WHERE EXISTS (select * from `admin` where pw=?)
ありがとうございます。
私の要求は実現可能ですか?MySql条件付き挿入
私は管理者のパスワードで挿入を保護したいと思います。
INSERT INTO `user` (`id`, `pw`, `name`) VALUES (?,?,?) WHERE EXISTS (select * from `admin` where pw=?)
ありがとうございます。
はい - しかし、あなたは、私がこれを書くために傾向があるINSERT
INSERT INTO `user` (`id`, `pw`, `name`)
SELECT ?,?,? FROM dual WHERE EXISTS (select * from `admin` where pw=?)
その変更の理由を説明できますか?私はあなたが間違っていると言っているわけではありませんが、私たちが何をすることができるか、*なぜ*どうすればいいのか、知っているといいでしょう。 – Pshemo
INSERT ... VALUESステートメントにWHERE句を追加することはできませんが、INSERT ... SELECTフォームにはWHERE句を付けることができます。それ以外の特別な理由は、言語が定義された方法ではありません。 –
のSELECT形式を使用する必要がありますあなたが二回(pw
パラメータを含める必要はありません
INSERT INTO `user`(`id`, `pw`, `name`)
SELECT x.id, x.pw, x.name
FROM (SELECT ? as id, ? as pw, ? as name) x
WHERE EXISTS (select 1 from `admin` a where a.pw = x.pw);
注意を私はこれがあなたが望むロジックだと仮定しています)。
さらに重要なことに、pw
がadmin
で正しく有効であることを確認したいと思われるようです。
alter table user add constraint fk_user_pw
foriegn key (pw) references admin(pw);
次にあなたがinsert
に特別なロジックを必要としない。これを行うには現実的な方法は、外部キー制約です。 pw
の値が一致しないと失敗します。
これは、update
とinsert
でも有効です。
ここでは良い答えを出していますが、プレーンテキストやひどくハッシュされたパスワードを確認して管理ステータスをテストするのは、実際には非常に悪い考えです。 – tadman
これが達成するために何を意味するのかは私には分かりません。これが通常の 'INSERT'とは異なる何をすると思いますか? – David
SQLの操作ごとにパスワードを確認して、管理者の状態をテストするのは非常に危険です。これは、パスワードを正しくハッシュしていないことを意味します.BcryptまたはScryptを使用して確認する必要がある場合、MySQLがサポートしていないものがあるからです。 – tadman