IMG-LOGO
공지사항 :

PHP MySQL 확장(MySQL Extension)

lmkfox - 2025-08-11 06:31:29 27 Views 0 Comment

1. MySQL 확장이란

  • PHP 4와 PHP 5 초반까지 MySQL 서버와 통신하기 위해 제공된 C 기반 API.

  • 단순하고 배우기 쉬웠지만, 보안과 기능이 부족했습니다.

  • 대표 함수:

    mysql_connect(), mysql_select_db(), mysql_query(), mysql_fetch_array() 등


2. MySQL 확장의 주요 함수

함수

설명

mysql_connect()

MySQL 서버에 연결

mysql_select_db()

데이터베이스 선택

mysql_query()

SQL 쿼리 실행

mysql_fetch_array()

결과를 배열로 반환

mysql_fetch_assoc()

연관 배열로 반환

mysql_num_rows()

결과 행 개수 반환

mysql_close()

연결 종료


3. 사용 예제 (구버전 방식)

<?php
// MySQL 연결
$conn = mysql_connect("localhost", "root", "비밀번호");
if (!$conn) {
    die("DB 연결 실패: " . mysql_error());
}

// 데이터베이스 선택
mysql_select_db("testdb", $conn);

// 쿼리 실행
$result = mysql_query("SELECT id, name FROM users");

while ($row = mysql_fetch_assoc($result)) {
    echo "ID: " . $row['id'] . " 이름: " . $row['name'] . "<br>";
}

// 연결 종료
mysql_close($conn);
?>


4. MySQL 확장의 문제점

  1. 보안 취약점

    • Prepared Statement 미지원 → SQL 인젝션에 취약

  2. 유니코드/UTF-8 지원 부족

    • 문자셋 설정 불편, 멀티바이트 문자 처리 문제

  3. 기능 부족

    • 트랜잭션, 스토어드 프로시저 등 최신 DB 기능 미흡

  4. 확장성 부족

    • MySQL 전용으로, 다른 DBMS로의 변경 불가능

  5. 유지보수 중단

    • PHP 5.5에서 사용 중단(Deprecated)

    • PHP 7.0에서 완전 제거


5. 대체 기술

MySQL 확장을 더 이상 사용할 수 없으므로, 아래 중 하나를 사용해야 합니다.

1) MySQLi (MySQL Improved)

  • MySQL 전용

  • 절차지향 + 객체지향 지원

  • Prepared Statement 지원

  • 최신 MySQL 기능 지원

예:

$conn = new mysqli("localhost", "root", "비밀번호", "testdb");
$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();

2) PDO (PHP Data Objects)

  • 다양한 DBMS 지원 (MySQL, PostgreSQL, SQLite 등)

  • 객체지향 기반

  • Prepared Statement 지원

  • DB 변경 시 코드 수정 최소화

예:

$pdo = new PDO("mysql:host=localhost;dbname=testdb;charset=utf8", "root", "비밀번호");
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute([':id' => 1]);


6. MySQL 확장과 MySQLi/PDO 비교

기능

MySQL 확장

MySQLi

PDO

DB 지원

MySQL 전용

MySQL 전용

다중 DB 지원

Prepared Statement

X

O

O

객체지향 지원

X

O

O

트랜잭션

X

O

O

PHP 7 이상 지원

X

O

O


7. 결론

  • mysql_* 함수는 더 이상 사용할 수 없으며, MySQLi 또는 PDO로 반드시 전환해야 합니다.

  • 새로운 프로젝트는 보안과 확장성을 위해 PDO 또는 MySQLi(객체지향) 사용을 권장합니다.


댓글