프로필카테고리질문하기
로그인 계정 만들기

MySQLi와 PDO 중 어떤걸 쓰는게 좋나요?

394 개월 전

PHP에서 MySQL에 연결하기 위해 mysql, mysqli, pdo 중 어떤걸 쓰는게 좋나요? (그리고 어떤 차이점이 있나요?)

답변하기 의견 추가
의견 (0)
더 많은 의견 보기

답글 (1)

mysql_* vs MySQLi vs PDO

1. mysql 함수는 이제는 더 이상 사용되지 않는 절차지향적인 인터페이스에요. mysql 함수에서는 SQL 인젝션을 막기 위해 모든 변수를 수동으로 이스케이프해야해요.

2. MySQLi는 mysql 함수를 대체하기 위해 만들어진 객체지향적인 인터페이스에요. MySQLi는 Prepared Statement를 지원해요.

3. PDO(PHP Data Objects)는 보다 일반적인 데이터베이스 인터페이스에요. PDO는 객체지향적이고 Prepared Statement를 지원할 뿐만 아니라 많은 MySql 이외의 데이터베이스들도 지원해요.

PDO를 추천해드려요

mysql 함수는 보안에 구멍을 만들 수 있고, 코드가 더럽게 보이게 만들어요. 그래서 이제 더 이상 사용되지 않아요.

그러니 선택지는 MySQLi와 PDO 두 개인데, 그 중 PDO를 추천해드려요.


1. MySQLi는 MySQL만을 위한 인터페이스에요. PDO는 MySql 뿐만 아니라 다른 많은 RDBMS들도 지원해요.

그래서 (흔하지 않지만) MySql에서 다른 RDBMS로 옮겨가야 하는 상황이 벌어진다면 크게 코드를 수정할 필요가 없이 옮겨갈 수 있어요.


2. MySQLi는 Prepared Statement에서 ? (물음표 기호) 만을 플레이스홀더로 사용할 수 있지만 PDO는 플레이스홀더에 이름을 붙일 수 있어요. 예를들어 :myColumn 처럼 말이죠 (물론 그냥 ? 도 사용할 수 있어요.)

참고: PDO Prepared Statement

Prepared Statement는 같은 Statement를 여러번 실행하거나 SQL 인젝션 공격을 막는데 효과적이에요.

먼저 placeholder가 포함된 쿼리 스트링을 전달하고, 변수(사용자 입력 값 등)를 그 다음에 전달하는 방식이에요.

$color = $_GET['color']; $st = $pdo->prepare('SELECT * FROM fruits WHERE color = ?'); $st->execute($color); while($fruit = $st->fetchObject()) { echo $fruit->name; }
의견 추가
의견 (0)
더 많은 의견 보기

정보

업보트
1
질문됨
4 개월 전
최근 활동
4 개월 전

카테고리

PHP