PDO

객체지향과 더 높은 생산성을 위해 mysql 확장을 제거하고 여러가지 데이터베이스를 제어하는 방법을 표준화 시킨 PDO가 등장하였다.

Introduction

기존의 mysqli_connect를 사용하는 경우

$serverName = "localhost";
$username = "root";
$password = "";

$conn = mysqli_connect($serverName, $username, $password);

PDO를 사용하여 연결하는 경우

$serverName = "localhost";
$username = "root";
$password = "";

$conn = new PDO("mysql:host=$serverName;dbname=test", $username, $password);

Prepare Statements

PDO와 mysqli_connect 모두 Prepared Statements 를 지원한다. 이는 SQL injectioin 으로부터 웹 어플리케이션을 보호하는데 매우 중요하다.

PrepareStatements는 sql을 반복적으로 실행하는 경우 효율성을 높여주는 방식이다. 작동 순서는 아래와 같다.

Prepare Statements 실행 순서

  1. Prepare 단계(준비)

    PrepareStatements는 파라매터를 지정하지 않은 상태로 sql문을 DB로 전송한다

    INSERT INTO table VALUES(?, ?, ?)
    

    예시로 다음과 같은 형태로 사용한다.

  2. 저장

    DB는 SQL템플릿에서 쿼리를 최적화 하고 컴파일 하며 실행하지 않고 저장해둔다.

  3. Execute 실행

    응용프로그램에서 파라매터를 바인딩하고 DB명령문을 수행한다. 응용프로그램은 파라매터만 변경해서 원하는 만큼 해당 Statements를 실행할 수 있다.

Prepare Statements의 장점