2011-11-16 2 views
1

내가 삽입되기 전에 뭔가 고유한지 알아야 할 때. 나는 보통 그것을 삽입하려고 시도하고 실패 할 경우 mysql_errno()가 1062인지 확인한다. 만약 그것이 중복 키로 실패했다면 나는 무엇을해야 할지를 알 수있다.mysql 누락 이중 키 오류

가장 일반적인 장소는 사용자 테이블입니다. 이메일을 로그인 용 "사용자 이름"만큼 고유하게 설정했습니다. 등록 양식을 처리 할 때 고유성을 검사하기 위해 추가 쿼리를 실행하는 대신 쿼리를 컴파일하고 실행 한 다음 1062 오류 번호를 확인합니다. 그것은 1062와 함께 실패하면 전자 메일이 등록되어 있고 모두 좋다는 것을 사용자에게 알린다.

그러나 최근에 나는 자신과 다른 개발자에게 쿼리 시간, 시스템의 모든 SQL 쿼리에 대한 로그 액세스를 제공하는 매우 기본적인 MITM SQL 쿼리 함수를 설정했으며, 가장 중요한 것은 함수 (연결 식별자를 수동으로 전달할 필요없이) 필요에 따라 올바른 데이터베이스에 mysql 연결을 설정합니다.

SQL 오류 쿼리 로그에서이 함수는 디스크에 모든 내 중복 항목을 만듭니다. 이것은 분명히 오류를 보는 다른 사람들에게 잘 보이지 않습니다 (처리하고 예상 했음에도 불구하고). 어떻게 든 오류를 보완하는 방법이 있습니까? 그렇지만 여전히 mysql_errno()를 확인할 수 있습니까?

+4

테이블에서 키를 검색하지 않고 왜 발견되면 중복으로 계산합니까? 따라서 오류가 발생하지 않으며이를 억제 할 필요가 없습니다. – Nobody

+0

추가 mysql 쿼리 및 추가 코드 때문입니다. 이메일에서 지정된 사용자 이름으로 사용자 이름을 변경하면 어떻게됩니까? 나는 그 고유 키를 인식 할 필요가있는 곳에 코드를 수정해야 할 것이다. 성능 현명한 나는 그것이 단지 몇 밀리 초에 의해 도움이 상상하지만, 내 쿼리 카운트를 가능한 한 낮게 유지 싶습니다. – Lee

+0

당신은 일을 기록하는 함수를 만들었고, 너무 많이 로깅한다고 불평하고 있습니까? 그것은 당신의 기능입니다 ... "관련성이없는"오류를 기록하지 않도록 수정할 수 있습니까? –

답변

1

그래서 여기에 내 계정에 약간의 가사일을하는 동안, 나는 그것을 닫을 수 있도록 내 결과로 이것을 대답하는 것이 최선이라고 생각했습니다. 이것은 기본적으로 위의 마지막 코멘트에서 결론입니다.

당신이 (나 같은) 유효성 검사 쿼리 또는 코드 (중복 키가 내가 찾는 가장 일반적인되는)를 줄이기 위해 응용 프로그램에서 mysql의 특정 오류 코드를 사용하는 경우. throw되는 에러를 막는 유일한 방법은 mysql 내부의 에러를 잡아서 처리하는 것이다. 나는 늘 시작하는 여기에 어떻게에 있지만 좋은 장소로 이동하는 것입니다 :

http://dev.mysql.com/doc/refman/5.0/en/declare-handler.html

참고 : 그냥 거기에 새로운 디바이스의 아웃도 (구글 "DUPLICATE KEY ON"체크 아웃하는 것을 잊지 말아 그것). 그것은 맹목적으로 나에게 다른 곳에서 제안 된 무언가였다. 이 예제에서는 맞지 않지만 삽입하기 전에 중복 레코드에 대한 검사를 저장하기 위해 올해 사용했습니다 (중복 된 항목에 오류를 반환하지 않습니다. 따라서 중복 오류 처리기를 사용하여 대신 업데이트를 수행하십시오 ... 따라서 여기에서 길을 찾으십시오)