2012-04-24 2 views
1

IF NOT EXISTS 문이 있습니다. 존재하지 않으면 INSERT 문이 수행됩니다. IF EXISTS PHP로 해석 할 수 있도록 반환 할 수있는 것을 이해해야합니다.SQL 존재하지 않는 경우 - 존재시 반환/해석 방법

그렇게 :

IF NOT EXISTS (SELECT id FROM users WHERE lname='SMITH') 
INSERT INTO users (lname='SMITH') 

나는 부정적인 표준

if ($result){echo "record added";} 
else {echo "duplicate - no record added";} 

을 사용할 수 그래서 결과를 반환하지 것이라고 생각하지만 그것은 무슨 일이 일어나고 있는지 아니라 내가 무엇을 달성하는 방법을 잘 모르겠어요 I 필요 - 어떤 제안?

감사합니다.

+0

'$ result'는 어떻게 정의되고 있습니까? SQL은 비록 내가 PHP에서 어떻게 생겼는지에 대해 완전히 확신하지는 않지만 '나는 뭔가했다'개체를 생성 할 것입니다. 필자가 알고있는 한 행을 삽입하지 않으면 표준 코드'100'을 얻을 수 있습니다. 그러나, 나는 당신이 SQL을 작성한 방식이 그것을 어떻게 할 것인지 확신하지 못한다. 항상 INSERT를 실행하는 형식으로 다시 작성하는 편이 좋겠지 만 항상 그렇게 할 행은 없을 것입니다. –

답변

1

두 경우 모두 $result은 성공적으로 실행 된 명령에 대한 응답을 반환합니다. INSERT은 행을 생성하지 않으며 일치 조건이없는 IF 문도 실행하지 않습니다.

삽입 된 ID를 검색하려면 SELECT SCOPE_IDENTITY()을 사용할 수 있으며 $result이 행을 반환했는지 확인할 수 있습니다.

+0

처음에는'SELECT SCOPE_IDENTITY'를 시도했지만 유감스럽지 않게 결과를 리턴합니다 - 이것은 단지 최종 결과이므로 항상 긍정적 인 것으로 밝혀졌습니다. 의견을 보내 주셔서 감사합니다, PinnyM! – jlisham

+0

맞아, 생각은 @nonnb의 해결책과 비슷한'IF NOT EXISTS' 바디의 일부로'SELECT'를 수행하는 것이 었습니다. – PinnyM

+0

맞아요, PinnyM ... 전 그냥 SELECT SCOPE_IDENTITY()를 사용할 수 있습니다. '끝 '을하고'ELSE'를 완전히 버리십시오. 더 나은 솔루션. 건배! – jlisham

1

당신은 같은 것을 시도 할 수 있습니다 :

SET NOCOUNT ON 
IF NOT EXISTS (SELECT id FROM users WHERE lname='SMITH') 
    BEGIN 
    INSERT INTO users (lname) VALUES('SMITH') 
    SELECT 1 
    END 
ELSE 
    SELECT 0 

을 그리고 반환 스칼라 = 0 또는 1을 확인?

+0

나는 당신이 제안한 것을 변형하여 사용했다 :'... SELECT 1 AS 응답 END ELSE SELECT NULL AS 응답'어떤 작동 ... 더 많은 시간이있을 때 이것에 대해 좀 더 연구해야 할 것입니다 . 응답 주셔서 감사합니다, nonnb! – jlisham

관련 문제