PHP 4와 PHP 5 초반까지 MySQL 서버와 통신하기 위해 제공된 C 기반 API.
단순하고 배우기 쉬웠지만, 보안과 기능이 부족했습니다.
대표 함수:
mysql_connect(), mysql_select_db(), mysql_query(), mysql_fetch_array() 등
함수 |
설명 |
---|---|
mysql_connect() |
MySQL 서버에 연결 |
mysql_select_db() |
데이터베이스 선택 |
mysql_query() |
SQL 쿼리 실행 |
mysql_fetch_array() |
결과를 배열로 반환 |
mysql_fetch_assoc() |
연관 배열로 반환 |
mysql_num_rows() |
결과 행 개수 반환 |
mysql_close() |
연결 종료 |
<?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);
?>
보안 취약점
Prepared Statement 미지원 → SQL 인젝션에 취약
유니코드/UTF-8 지원 부족
문자셋 설정 불편, 멀티바이트 문자 처리 문제
기능 부족
트랜잭션, 스토어드 프로시저 등 최신 DB 기능 미흡
확장성 부족
MySQL 전용으로, 다른 DBMS로의 변경 불가능
유지보수 중단
PHP 5.5에서 사용 중단(Deprecated)
PHP 7.0에서 완전 제거
MySQL 확장을 더 이상 사용할 수 없으므로, 아래 중 하나를 사용해야 합니다.
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();
다양한 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]);
기능 |
MySQL 확장 |
MySQLi |
PDO |
---|---|---|---|
DB 지원 |
MySQL 전용 |
MySQL 전용 |
다중 DB 지원 |
Prepared Statement |
X |
O |
O |
객체지향 지원 |
X |
O |
O |
트랜잭션 |
X |
O |
O |
PHP 7 이상 지원 |
X |
O |
O |
mysql_* 함수는 더 이상 사용할 수 없으며, MySQLi 또는 PDO로 반드시 전환해야 합니다.
새로운 프로젝트는 보안과 확장성을 위해 PDO 또는 MySQLi(객체지향) 사용을 권장합니다.