PDO를 사용한 데이터베이스 연결 시 발생하는 일반적인 오류들과 해결 방법을 알아보겠습니다.
SQLSTATE[HY000] [2002] Connection refused
SQLSTATE[HY000] [1045] Access denied for user
SQLSTATE[HY000] [2006] MySQL server has gone away
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());
}
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)) {
// 정상 처리
}
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초 대기 후 재시도
}
}
}
// .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 -m | grep pdo
netstat -an | grep 3306
PDO 연결 오류는 대부분 설정 문제이므로, 체계적인 확인 과정을 통해 빠르게 해결할 수 있습니다.