4 つのテーブルに値を挿入するストアド プロシージャを作成しています。要点は、SQL インジェクションを防ぎINSERT
、ユーザーが持っているパーミッションをより適切に定義するために PHP から SQLSELECT
を取り除くことです。渡された変数。ALTER
DELETE
ただし、プレーヤーが既に存在する場合は、再度追加する必要はありません (独自に作成したことを考えると不可能です)。この問題は、プレイヤー テーブルと座標テーブルの間に 1 対多の関係があるために発生します。
だから私が望むのはINSERT
、値がすでに存在するかどうかをテストする条件と、次のINSERT
ステートメントに移動するかどうかです。
ストアド プロシージャは次のとおりです。
CREATE PROCEDURE `acdb_extended`.`addAlliedMember` (IN accountNumber VARCHAR(255),
IN userName VARCHAR(255), IN serverInitial CHAR(1), IN galaxy TINYINT(2),
IN region TINYINT(2), IN system TINYINT(2), IN astro TINYINT(2), IN level TINYINT(2),
IN allianceName VARCHAR(255))
BEGIN
INSERT INTO player (account_number, username)
VALUES (accountNumber, userName);
INSERT INTO coordinates (player_ID, server_initial, galaxy, region, system, astro)
VALUES ((SELECT player_ID FROM player WHERE username = userName), serverInitial,
galaxy, region, system, astro);
INSERT INTO jumpgate (player_ID, coordinates_ID, level, usable)
VALUES ((SELECT player_ID FROM player WHERE username = userName),
(SELECT c.coordinates_ID FROM coordinates c WHERE c.server_initial = serverInitial
AND c.galaxy = galaxy AND c.region = region AND c.system = system AND c.astro = astro),
level, FALSE);
INSERT INTO relationship (player_ID, ally, alliance_name)
VALUES ((SELECT player_ID FROM player WHERE username = userName),
TRUE, allianceName);
END
必要だと思いますON DUPLICATE KEY
が、その使い方がよくわかりません。
すべての助けを前もって感謝します。