mysql_pconnect() 함수는 사용할 수 없나요?
💡 요약 정리
- 웹호스팅에서는 mysql_pconnect() 사용이 불가능합니다.
- 이유: 지속 연결이 누적되어 DB 서버에 불필요한 부하를 유발합니다.
- 해결: mysql_pconnect()를 mysql_connect()로 바꾸면 기능상 큰 차이 없이 동작합니다.
- 참고: PHP 7 이상에서는 mysql_* 확장이 제거되었으므로, mysqli 또는 PDO 사용을 권장합니다.
1. 웹호스팅에서 mysql_pconnect()가 제한되는 이유
- mysql_pconnect()는 데이터베이스 연결을 오래 유지하는 지속 연결(퍼시스턴트 커넥션) 방식입니다.
- 공유 웹호스팅 환경에서는 다수의 사이트가 같은 DB 서버를 사용하므로, 지속 연결이 누적되면 불필요한 커넥션 증가로 서버 부하가 커집니다.
- 따라서, 웹호스팅에서는 mysql_pconnect() 사용이 불가능합니다.
2. 무엇으로 대체하면 되나요?
2.1 가장 간단한 해결: mysql_connect()로 변경
- 기존 코드에서 mysql_pconnect()를 mysql_connect()로 바꾸면 됩니다. 기능상 큰 차이 없이 DB에 접속할 수 있습니다.
// 변경 전 (지속 연결)
$link = mysql_pconnect('localhost', 'db_user', 'db_pass');
// 변경 후 (일반 연결)
$link = mysql_connect('localhost', 'db_user', 'db_pass');
mysql_select_db('db_name', $link);
일반 연결은 요청이 끝나면 자동으로 종료되므로, 커넥션 누적에 따른 서버 부하를 줄일 수 있습니다. 필요하다면 mysql_close($link);로 명시적으로 닫을 수 있습니다.
2.2 PHP 7 이상 권장 전환: mysqli 또는 PDO
주의: PHP 7 이상에서는 mysql_* 확장이 제거되어 mysql_connect / mysql_pconnect 모두 사용할 수 없습니다. 이 경우에는 아래 중 하나로 전환하세요.
// mysqli (권장)
$mysqli = new mysqli('localhost', 'db_user', 'db_pass', 'db_name');
if ($mysqli->connect_errno) {
die('Connect Error: ' . $mysqli->connect_error);
}
// 쿼리 예시
$result = $mysqli->query("SELECT 1");
// PDO (권장)
$pdo = new PDO(
'mysql:host=localhost;dbname=db_name;charset=utf8mb4',
'db_user',
'db_pass',
[
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]
);
// 쿼리 예시
$stmt = $pdo->query("SELECT 1");
3. 자주 하는 질문
-
Q. 지속 연결이 꼭 필요합니다. 방법이 없나요?
- A. 공유 웹호스팅 환경에서는 지속 연결이 허용되지 않습니다. 애플리케이션 구조를 일반 연결 기준으로 설계하거나, 지속 연결이 꼭 필요한 워크로드라면 전용 서버 환경을 검토해야 합니다.
-
Q. php.ini나 설정 으로 예외적으로 허용할 수 있나요?
- A. 불가합니다. 공유 환경의 안정성을 위해 정책적으로 제한됩니다.