PDO의 기본 오류 처리 모드는 pdo :: errmode_silent 입니다. 즉, 오류가 발생하면 PDO는 적극적으로 예외를 던지지 않지만 조용히 처리합니다. 즉, SQL 문을 실행할 때 오류가 발생하면 PDO가 자동으로 프롬프트하거나 예외를 던지지 않지만 수동으로 오류 상태를 확인해야합니다.
예외를 포착하고 오류가 발생할 때 디버깅을 원한다면이를 수행하는 올바른 방법은 pdo의 오류 모드를 pdo :: errmode_exception 으로 설정하는 것입니다. 이런 식으로, exec () 또는 기타 데이터베이스 작동 방법이 실행되면 오류가 발생하면 예외가 발생하여 Try-Catch를 통해 잡아서 처리 할 수 있습니다.
pdo 인스턴스를 만들 때 stattribute () 메소드를 사용하여 오류 처리 모드를 설정할 수 있습니다. 예를 들어, 다음 코드는 예외 처리를 활성화하는 방법을 보여줍니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-comment">// 만들다 PDO 예,오류 모드를 예외로 설정하십시오</span></span><span>
</span><span><span class="hljs-variable">$pdo</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">PDO</span></span><span>(</span><span><span class="hljs-string">'mysql:host=localhost;dbname=testdb'</span></span><span>, </span><span><span class="hljs-string">'username'</span></span><span>, </span><span><span class="hljs-string">'password'</span></span><span>);
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">setAttribute</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">ATTR_ERRMODE</span></span><span>, PDO::</span><span><span class="hljs-variable constant_">ERRMODE_EXCEPTION</span></span><span>);
</span><span><span class="hljs-comment">// 실행 a SQL 성명</span></span><span>
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"UPDATE users SET name = 'John' WHERE id = 1"</span></span><span>;
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">exec</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-comment">// 예외를 잡고 처리합니다</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'데이터베이스 작업이 실패했습니다: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>이 예에서는 pdo :: attr_errmode를 pdo :: errmode_exception 으로 설정하여 exec ()가 실행되지 않으면 pdo가 pdoexception 예외를 던지고 Catch 문을 통해 오류 메시지를 포착 할 수 있습니다.
PDO의 기본 오류 처리 모드는 성능을 향상시키는 것입니다. 특히 오류 처리가 필요하지 않은 시나리오에서 불필요한 오버 헤드를 줄일 수 있습니다. 예를 들어, 배치 삽입 작업을 실행할 때 개발자는 각 데이터 조각이 성공적으로 삽입되는지 여부를 신경 쓰지 않고 전체 실행에 문제가 있는지 여부에만주의를 기울일 수 있습니다. 예외를 던지지 않으면 코드의 복잡성을 줄일 수 있습니다.
그러나 데이터베이스 작업에서 엄격한 오류 확인을 수행 해야하는 경우 예외 모드를 켜는 것이 중요 해집니다. 그렇지 않으면, SQL 문이 잘못 쓰여져 있더라도 PDO는 당신에게 무언가 잘못된 것을 자극하지 않습니다.
exec ()는 트랜잭션 외부에서 오류 처리 만 수행한다는 점에 유의해야합니다. 트랜잭션 내에서 exec ()를 사용하고 예외가 올바르게 잡히지 않으면 트랜잭션의 커밋 또는 롤백이 자동으로 처리되지 않습니다. 트랜잭션을보다 잘 제어하려면 targettransaction () 및 commit () 와 함께 사용해야합니다.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">try</span></span><span> {
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">beginTransaction</span></span><span>();
</span><span><span class="hljs-variable">$sql</span></span><span> = </span><span><span class="hljs-string">"UPDATE users SET name = 'Jane' WHERE id = 1"</span></span><span>;
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">exec</span></span><span>(</span><span><span class="hljs-variable">$sql</span></span><span>);
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">commit</span></span><span>(); </span><span><span class="hljs-comment">// 거래를 제출하십시오</span></span><span>
} </span><span><span class="hljs-keyword">catch</span></span><span> (PDOException </span><span><span class="hljs-variable">$e</span></span><span>) {
</span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">rollBack</span></span><span>(); </span><span><span class="hljs-comment">// 트랜잭션을 롤백하십시오</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">'거래에 실패했습니다: '</span></span><span> . </span><span><span class="hljs-variable">$e</span></span><span>-></span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>이렇게하면 오류가 발생하면 트랜잭션이 롤백되어 데이터베이스 상태에서 일관성을 보장합니다.
관련 태그:
PDO