2017-12-02 19 views
2

나는 postgres와 함께 PHP pdo를 사용하고 있습니다. 코어 PHP, mvc 없음, 클래스 및 개체를 사용하고 있습니다. 내가 개발에 새로운 오전 이후, 내 마음에 약간의 의심을 가지고있다 -올바른 방법으로 PHP pdo에서 캐치를 시도하십시오.

  • 내가 모든 쿼리 실행에 시도 캐치를 사용해야합니다.
  • 그리고 나는 예외

  • 에서 실행되는 스크립트를 종료해야 다음 시도 캐치를 사용하여 모든 쿼리에 대해 하나의 시도 캐치를 사용하는 방법이 있는지, 내가 실행하기위한 공통 기능을 할 말은 검색어.

  • 아약스의 예외 처리 방법.

이 점에 대해 분명히 의구심을 표하십시오.

답변

3

너무 많은 질문이 있으며 너무 일반적입니다. 그러나 대부분의 경우 :

  1. 당신 앱의 논리와 특정 사건에 달려 안돼
  2. . 도시의 어딘가에서 누수가 있으면 급수 시스템을 완전히 중단 할 것으로 예상됩니까? 일반적으로 DB 쿼리가 실패하면 프로세스를 더 이상 이해하지 못하는 구체적인 모듈/부분이 있습니다. 그리고 해당 모듈/부품 만 종료/중지해야합니다.
  3. PDO를 둘러싼 자신의 포장을하지 않는 것이 좋습니다. 대부분의 경우 코드를 실제 이익없이 유지하기가 더 어려워집니다.
  4. 일반적으로 가장 좋은 해결책은 클라이언트 코드에 "미안하지만 아직이 정보를 얻을 수 없습니다"라는 HTTP 오류 (404 찾을 수 없음 또는 500 내부 서버 오류)를 반환하는 것입니다. 클라이언트 코드는 오류를 처리하는 방법 - 그것은 클라이언트 코드의 논리에 따라 달라집니다/특정 오류를 처리 할 수있는 특정 시나리오가있는 경우에만
+0

프로덕션 서버에 있기 때문에 오류보고가 꺼져 있습니다. 나는 ** $ conn-> setAttribute (PDO :: ATTR_ERRMODE, PDO :: ERRMODE_EXCEPTION); **를 사용해야 할 것입니다. –

+0

PDO 관련 플래그에 익숙하지 않습니다. 일반적으로 프로덕션을 위해 모든 단일 오류/예외를 로그에 기록해야하며 아무도 브라우저에 표시해서는 안됩니다. 따라서 yes, error_reporting은 off이고 log_errors는 on이며 PDO가 오류를 기록하는 데 필요한 모든 것도 on입니다. – skyboyer

+0

그래서 try catch없이 에러를 어떻게 기록합니까? –

3
  1. 흐름. 예를 들어 중복 된 고유 키가 있으며이 키에 대해서는 대체 시나리오가 있습니다. (이 특정 오류를 항상 확인하고 예외를 다시 throw해야합니다).
    그러나 정기적 인 쿼리의 경우 @skyboyer와 마찬가지로 임의의 오류 만 처리 할 수 ​​있습니다. 예외는 사이트 전체 핸들러에 버블 링되어야합니다.
  2. 다시 알려드립니다. 특수 처리 시나리오 인 경우 시나리오에 대해 염두에 두신 사항을 수행하십시오. 그러나 임의의 오류에 대해서는 코드 실행이 예기치 않은 결과를 초래할 수 있으므로 코드 실행을 중단하는 데 동의합니다.
  3. 두 가지 질문이 있습니다.
    • try catch는 사이트 전체 예외 처리기로 작동하여 전체 코드를 래핑하는 것이 완벽합니다.
    • 모든 쿼리를 실행하는 함수로서 - 그것은 훌륭한 아이디어이지만 오류 처리와는 아무런 관련이 없습니다. 데이터베이스 오류가 사이트의 다른 오류와 다를 바 없으므로 정확하게 동일한 방식으로 처리해야하기 때문입니다. 따라서 쿼리 함수에 전용 try-catch를 작성하는 것은 의미가 없습니다. 예외를 throw 한 다음 해당 예외를 사이트의 다른 오류와 마찬가지로 처리하도록하십시오.
  4. 비 AJAX 오류와 거의 같은 방식입니다. 다시 @skyboyer가 말했듯이, 처리기가 500 HTTP 상태를 반환하도록 설정하면 AJAX 호출 코드에서 오류가 있음을 알 수 있습니다. 충분하다

내가 흥미로운 부분을 모두 설명하려고 시도한 곳에서 PHP Error reporting 기사를 썼다.