현재 위치: > 최신 기사 목록> PDO :: Exec가 예외를 던지지 않는 이유는 무엇입니까? 어쩌면이 단계를 잊었을 수도 있습니다

PDO :: Exec가 예외를 던지지 않는 이유는 무엇입니까? 어쩌면이 단계를 잊었을 수도 있습니다

gitbox 2025-09-17

PDO 오류 처리 모드

PDO의 기본 오류 처리 모드는 pdo :: errmode_silent 입니다. 즉, 오류가 발생하면 PDO는 적극적으로 예외를 던지지 않지만 조용히 처리합니다. 즉, SQL 문을 실행할 때 오류가 발생하면 PDO가 자동으로 프롬프트하거나 예외를 던지지 않지만 수동으로 오류 상태를 확인해야합니다.

예외를 포착하고 오류가 발생할 때 디버깅을 원한다면이를 수행하는 올바른 방법은 pdo의 오류 모드를 pdo :: errmode_exception 으로 설정하는 것입니다. 이런 식으로, exec () 또는 기타 데이터베이스 작동 방법이 실행되면 오류가 발생하면 예외가 발생하여 Try-Catch를 통해 잡아서 처리 할 수 ​​있습니다.

PDO 오류 처리 모드를 설정하는 방법은 무엇입니까?

pdo 인스턴스를 만들 때 stattribute () 메소드를 사용하여 오류 처리 모드를 설정할 수 있습니다. 예를 들어, 다음 코드는 예외 처리를 활성화하는 방법을 보여줍니다.

 <span><span><span class="hljs-meta">&lt;?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>-&gt;</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>-&gt;</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>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

이 예에서는 pdo :: attr_errmode를 pdo :: errmode_exception 으로 설정하여 exec ()가 실행되지 않으면 pdo가 pdoexception 예외를 던지고 Catch 문을 통해 오류 메시지를 포착 할 수 있습니다.

기본적으로 예외가 발생하지 않는 이유는 무엇입니까?

PDO의 기본 오류 처리 모드는 성능을 향상시키는 것입니다. 특히 오류 처리가 필요하지 않은 시나리오에서 불필요한 오버 헤드를 줄일 수 있습니다. 예를 들어, 배치 삽입 작업을 실행할 때 개발자는 각 데이터 조각이 성공적으로 삽입되는지 여부를 신경 쓰지 않고 전체 실행에 문제가 있는지 여부에만주의를 기울일 수 있습니다. 예외를 던지지 않으면 코드의 복잡성을 줄일 수 있습니다.

그러나 데이터베이스 작업에서 엄격한 오류 확인을 수행 해야하는 경우 예외 모드를 켜는 것이 중요 해집니다. 그렇지 않으면, SQL 문이 잘못 쓰여져 있더라도 PDO는 당신에게 무언가 잘못된 것을 자극하지 않습니다.

PDO :: 실행 및 거래

exec ()는 트랜잭션 외부에서 오류 처리 만 수행한다는 점에 유의해야합니다. 트랜잭션 내에서 exec ()를 사용하고 예외가 올바르게 잡히지 않으면 트랜잭션의 커밋 또는 롤백이 자동으로 처리되지 않습니다. 트랜잭션을보다 잘 제어하려면 targettransaction ()commit () 와 함께 사용해야합니다.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-keyword">try</span></span><span> {
    </span><span><span class="hljs-variable">$pdo</span></span><span>-&gt;</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>-&gt;</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>-&gt;</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>-&gt;</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>-&gt;</span><span><span class="hljs-title function_ invoke__">getMessage</span></span><span>();
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

이렇게하면 오류가 발생하면 트랜잭션이 롤백되어 데이터베이스 상태에서 일관성을 보장합니다.

  • 관련 태그:

    PDO