[php] PDO 예외 처리 클래스

이번에는 PHP의 PDO(Database Object)를 사용하여 데이터베이스 작업을 수행할 때 발생하는 예외를 처리하는 클래스를 만들어보겠습니다. PDO를 사용할 때 예외 처리를 적절하게 해주지 않으면 오류가 발생했을 때 어떤 일이 일어날지 예측하기 어려울 수 있기 때문에 이를 방지하기 위해 예외 처리를 잘 해주어야 합니다.

PDO 예외 처리 설정

우선, PDO 객체를 생성하고 예외 처리 모드를 설정해야 합니다. 다음은 데이터베이스에 연결하고 PDO 예외 처리 모드를 설정하는 코드입니다.

try {
    $pdo = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}

위 코드에서 setAttribute 함수를 사용하여 PDO 객체의 예외 처리 모드를 ERRMODE_EXCEPTION으로 설정하고, try-catch 블록을 사용하여 PDO 객체 생성 과정에서 발생하는 예외를 처리합니다.

PDO 예외 처리 클래스

이제 위에서 설정한 PDO 예외 처리를 좀 더 추상화하여 각각의 데이터베이스 작업에 대한 예외 처리를 더욱 효율적으로 관리할 수 있는 예외 처리 클래스를 만들어봅시다.

class PDOWrapper {
    private $pdo;

    public function __construct($dsn, $username, $password) {
        try {
            $this->pdo = new PDO($dsn, $username, $password);
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
            echo "Connection failed: " . $e->getMessage();
        }
    }

    public function query($sql) {
        try {
            return $this->pdo->query($sql);
        } catch (PDOException $e) {
            echo "Query failed: " . $e->getMessage();
        }
    }

    public function prepare($sql) {
        try {
            return $this->pdo->prepare($sql);
        } catch (PDOException $e) {
            echo "Prepare failed: " . $e->getMessage();
        }
    }

    // 다른 PDO 메소드들에 대해 예외 처리 추가
}

위 코드에서는 PDOWrapper 클래스를 생성하고, 생성자에서 PDO 객체를 생성하고 예외 처리 모드를 설정합니다. 또한, queryprepare 메소드에서 각각의 PDO 메소드 호출 시 발생하는 예외를 처리하도록 합니다.

예외 처리 클래스 사용 예시

이제 이 예외 처리 클래스를 사용하여 데이터베이스 작업을 수행하는 예시 코드를 살펴보겠습니다.

$pdoWrapper = new PDOWrapper('mysql:host=localhost;dbname=test', $user, $pass);
$stmt = $pdoWrapper->prepare('SELECT * FROM users WHERE id = :id');
$stmt->bindParam(':id', $id);
$stmt->execute();

위 코드에서는 PDOWrapper 클래스를 사용하여 PDO 객체를 생성하고, prepare 메소드를 통해 SQL 쿼리를 실행합니다. 이때 발생하는 예외는 PDOWrapper 클래스에서 처리되므로 예외를 적절히 처리할 수 있습니다.

이렇게 PDO 예외 처리 클래스를 만들어 사용하면 데이터베이스 작업을 보다 안정적으로 수행할 수 있습니다.

마무리

이렇게 PHP의 PDO를 사용하여 데이터베이스 작업을 수행할 때 발생하는 예외를 효율적으로 처리할 수 있는 예외 처리 클래스에 대해 알아보았습니다. 이를 통해 데이터베이스 작업을 보다 안정적으로 수행하고, 발생할 수 있는 예외에 대비할 수 있습니다.