PHP PDO 연결 오류 해결

프리터코더·2025년 5월 25일
0

php 문제 해결

목록 보기
21/79

PHP PDO 연결 오류 해결하기

PDO를 사용한 데이터베이스 연결 시 발생하는 일반적인 오류들과 해결 방법을 알아보겠습니다.

주요 오류 메시지

SQLSTATE[HY000] [2002] Connection refused
SQLSTATE[HY000] [1045] Access denied for user
SQLSTATE[HY000] [2006] MySQL server has gone away

일반적인 원인

  1. 잘못된 연결 정보: 호스트, 포트, 사용자명, 비밀번호 오류
  2. 서버 연결 불가: MySQL 서버가 실행되지 않음
  3. 권한 문제: 데이터베이스 접근 권한 부족

해결책

1. 기본 PDO 연결 설정

try {
    $host = 'localhost';
    $dbname = 'your_database';
    $username = 'your_username';
    $password = 'your_password';
    $charset = 'utf8mb4';

    $dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
    
    $options = [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES => false,
    ];

    $pdo = new PDO($dsn, $username, $password, $options);
    
} catch (PDOException $e) {
    die('연결 실패: ' . $e->getMessage());
}

2. 연결 상태 확인

function testConnection($pdo) {
    try {
        $stmt = $pdo->query('SELECT 1');
        echo "데이터베이스 연결 성공!\n";
        return true;
    } catch (PDOException $e) {
        echo "연결 테스트 실패: " . $e->getMessage() . "\n";
        return false;
    }
}

// 사용법
if (testConnection($pdo)) {
    // 정상 처리
}

3. 연결 재시도 로직

function createConnection($maxRetries = 3) {
    $retries = 0;
    
    while ($retries < $maxRetries) {
        try {
            $pdo = new PDO($dsn, $username, $password, $options);
            return $pdo;
            
        } catch (PDOException $e) {
            $retries++;
            echo "연결 시도 {$retries}회 실패: " . $e->getMessage() . "\n";
            
            if ($retries >= $maxRetries) {
                throw $e;
            }
            
            sleep(2); // 2초 대기 후 재시도
        }
    }
}

4. 환경별 설정 관리

// .env 파일 사용
$config = [
    'development' => [
        'host' => 'localhost',
        'dbname' => 'dev_db',
        'username' => 'dev_user',
        'password' => 'dev_pass'
    ],
    'production' => [
        'host' => 'prod-server.com',
        'dbname' => 'prod_db',
        'username' => 'prod_user',
        'password' => 'secure_pass'
    ]
];

$env = $_ENV['APP_ENV'] ?? 'development';
$dbConfig = $config[$env];

디버깅 방법

연결 정보 확인

mysql -h localhost -u username -p

PHP 확장 모듈 확인

php -m | grep pdo

포트 확인

netstat -an | grep 3306

예방법

  • 연결 정보를 환경 변수로 관리
  • 연결 풀링 사용 고려
  • 적절한 타임아웃 설정
  • 로그를 통한 연결 상태 모니터링

PDO 연결 오류는 대부분 설정 문제이므로, 체계적인 확인 과정을 통해 빠르게 해결할 수 있습니다.

profile
일용직 개발자. freetercoder@gmail.com

0개의 댓글