2015-08-05
필자가 처음 php를 접할때 많이 사용해 봤던 mysql_로 시작하는 함수들은 php 5.5부터는 더이상 사용 할 수 없게 된다.
그리고 해당 함수들을 대체하는 것으로는 php5.1부터 제공된 PDO가 있다.
PDO의 장점을 몇가지 말해보자면, 기존의 mysql_로 시작 되는 함수는 msql만 지원하지만 PDO는 여러 DB를 지원하고, 객체 형식으로 사용 가능하며, 인젝션에도 안전하다는 점 등을 들수 있다.

//------------------------추가 2015.11.02
PDO 트랜잭션 예제
$PDO->beginTransaction();

$sth = $PDO->exec("DROP TABLE fruit");

// $PDO->commit();
$PDO->rollBack();


메뉴얼 : http://php.net/manual/kr/book.pdo.php

간단 사용법 : http://blog.lansi.kr/archives/610




삭제 대비용 원본글 복사

객체 생성

try catch 문에서 생성합니다.

try {

    // MySQL PDO 객체 생성

    // mysql을 다른 DB로 변경하면 다른 DB도 사용 가능

    $pdo = new PDO("mysql:host=$host;dbname=$db", $user, $pass);

    // 에러 출력

    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

}

catch (Exception $e) {

    echo $e->getMessage();

}

 

커넥션 닫기

$pdo = null;

 

에러 모드

// 에러 출력하지 않음

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);

// Warning만 출력

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

// 에러 출력

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

 

SQL 실행

$st = $pdo->prepare('INSERT INTO table (col1) VALUE (`val1`)');

$st->execute();

 

Placeholder

PDO는 SQL 인젝션을 방지하기 위해 prepare와 placeholder를 사용합니다.

// placeholder 없음. SQL 인젝션의 위험이 있음.

$st = $pdo->("INSERT INTO table (col1, col2, col3) values ($val1, $val2, $val3)");

  

// 이름 없는 placeholder. SQL 인젝션 방지.

$st = $pdo->('INSERT INTO table (col1, col2, col3) values (?, ?, ?)');

// 값을 넘겨주고 실행

$st->execute(['val1', 'val2', 'val2']);

   

// 이름 있는 placeholder. SQL 인젝션 방지

$st = $pdo->("INSERT INTO table (col1, col2, col3) value (:col1, :col2, :col3)");

// 값을 넘겨주고 실행

$st->execute([':col1'=>'val1', ':col2'=>'val2', ':col3'=>'val3']);

 

Fetch

Object, Class로 데이터를 가져오는 방법도 있지만

여기선 배열로 가져오는 방법만 소개하겠습니다.

// SELECT

$st = $pdo->('SELECT * FROM table');

$st->execute();

  

// Fetch 모드를 설정

$st->setFetchMode(PDO::FETCH_ASSOC);

  

// 1 row 씩 가져오기

while($row = $st->fetch()) {

    echo $row['col1'].'<br/>';

    echo $row['col2'].'<br/>';

    echo $row['col3'].'<br/>';

}

 

FetchAll

한번에 모든 row를 가져올 수 있습니다.

$st->setFetchMode(PDO::FETCH_ASSOC);

$fetch_all = $st->fetchAll();

print_r($fetch_all);