Database

PDO

PHP의 내장 기능, 일반적인 DB 통신을 위한 것이다.

$db = new PDO('mysql:host=localhost;dbname=restaurant', '사용자명', '비밀번호');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //에러 발생 시 throw
$rows = $db->exec("SQL 쿼리"); //DML, DDL 등
$q = $db->query("SELECT문");
while($row = $q->fetch()){
    // 결과 순회
}
$rows = $q->fetchAll(); //전체 반환

//Prepared Statement
$stmt = $db->prepare('SQL 쿼리');
$stmt->execute(array(? 순서대로 들어갈 ));

// 반환 형식 변경
$q->fetch(PDO::FETCH_NUM); // 숫자 키 배열 반환, fetch에 적용
$q->setFetchMode(PDO::FETCH_ASSOC); // 문자 키 배열 반환, 쿼리에 적용
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); // 객체 반환, DB에 적용

// 따옴표, 와일드 카드 필터링(순서 중요)
$input = $db->quote($_POST['attack']); // 단일 따옴표를 이중으로 변경
$input = strtr($input, array('_'=>'\_', '%'=>'\%')); // 와일드카드 문자에 역슬래시 추가

DSN

  • MySQL : mysql: / host, port, dbname, unix_socket, charset
  • PostgreSQL : pgsql: / host, port, dbname, user, password, others
  • Oracle : oci: / dbname(hostname:port/database 형식), charset
  • SQLite : sqlite: / 콜론 뒤에 경로를 넣는다
  • ODBC : odbc: / DSN, UID, PWD
  • MSSQL : mssql / host, dbname, charset, appname