4 개의 테이블에 값을 삽입하는 저장 프로 시저를 만듭니다. SQL 삽입을 막고 사용자가 가진 권한을 더 잘 정의하도록 PHP를 벗어나는 것이 요점입니다. 즉, INSERT
, SELECT
, ALTER
및 DELETE
문에 대한 무제한 액세스가 허용되지 않고 단순히 프로 시저를 실행할 수 있습니다 전달 된 변수를 삽입해야합니다.MySQL 조건부 INSERT (매개 변수 포함)
그러나 플레이어가 이미있는 경우 다시 추가 할 필요가 없습니다 (고유 한 것으로 생각하면 불가능합니다). 이 문제는 플레이어 테이블과 좌표 테이블간에 일대일 관계가 있기 때문에 발생합니다.
그렇다면 값이 이미 존재하는지 테스트하고 다음 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
필요하지만 확실히 그것의 사용을 알아낼 수 없습니다. 모든 도움에 미리
감사합니다.
당신이'INSERT ... SELECT'를 사용할 수 있습니까? 당신이 그 예를 보여줄 수 있습니까? – Arcadian
듀얼은 무엇을 의미합니까? 테이블 이름인가요? 아니면 매개 변수에 대한 이중 참조입니까? 나는'SELECT'을 이해하지만, 나는 이것을 'FROM'을 가리키는 곳으로 이해하지 못합니다. – Arcadian
http://en.wikipedia.org/wiki/DUAL_table – nosid