2009-12-17 4 views
0

저는 PHP와 MySQL로 웹 애플리케이션을 개발해 왔습니다. 다른 날, 나는 데이터베이스를 약간 변경하고 한 페이지를 새 테이블 레이아웃에 적용했지만 다른 페이지에는 적용하지 않았습니다. 나는 충분히 테스트하지 않았기 때문에 사이트는 다른 페이지의 오류와 함께 온라인 상태가되었습니다. 그것은 단순한 MySQL 에러 였고, 동료 중 한 명이 그것을 발견하자, 그것은 간단한 수정이었습니다.PHP : MySQL 오류 훅?

이제 나는 다른 MySQL 오류를 어떻게 잡을 수 있는지 알고 싶습니다. 나는 일종의 알림 시스템에 대해 생각하고 있는데, mysql_query()가 실패하면 이메일을 보낸다.

물론 오류가 발생하기 전까지는 알리지 않겠지 만, 적어도 동료에게 알려주는 대신에 누가 알려주 었는지 알 수있을 것입니다. 다른 사람들은 같은 치명적인 오류를 겪었습니다.

오류가 발생했을 때 PHP가 자동으로 함수를 실행하도록 연결하는 방법이 있습니까? 아니면 내 코드를 살펴보고 mysql_query()를 사용하는 모든 위치에이 기능을 추가해야합니까?

후자의 경우 나중에 이와 같은 것을 방지하는 방법에 대한 권장 사항이 있습니까? 이 경우 SQL 작업을 추상화하는 클래스를 생성 할 것입니다. 나는이 모든 일을해야한다는 것을 알고있다. 그러나 필자는 다른 함수 파일 세트에 함수 세트를 정리 했으므로 나는 적어도 대부분의 일을 올바르게 수행하고있다. 권리?

답변

2

는이 같은 래퍼 함수를 ​​사용할 수 있습니다

function mysql_query_wrapper($query, $link=null) 
{ 
    if (is_null($link)) { 
     $result = myql_query($query); 
    } else { 
     $result = myql_query($query, $link); 
    } 
    if (mysql_error($result)) { 
     // error occurred 
    } 
    return $result; 
} 

은 그럼 그냥 mysql_query_wrappermysql_query 전화를 교체해야합니다.

+0

감사합니다. 페카, 네 대답 모두를 받아 들일 수 있으면 좋겠어. 나는 당신이 나에게 종합적인 해답과 내가 찾던 해답을 주었다고 생각한다! – Ricket

2

set_error_handler()을 사용하여 오류 처리를 위해 사용자 지정 함수를 사용할 수 있습니다.

그러나 mysql_query은 오류를 트리거하지 않지만 false을 반환합니다. 오류는 결과로 작업 할 때만 나타납니다. 이 경우 mysql_query()을 호출하고 mysql_error()을 사용하여 가능한 오류를 출력하는 사용자 정의 래퍼 함수를 ​​정의하는 것이 더 좋습니다. 그렇게하면 원하는 경우 오류가 발생하면 응용 프로그램을 즉시 중지 할 수 있습니다.

+0

실제로 오류를 출력하는 대신 모든 것을 처리하는 좋은 방법은 다음과 같습니다. a) 단일 쿼리 실행 지점을 지정합니다. b) 나머지 경우를 처리하도록 set_error_handler()를 설정합니다. –