PDO ( PHP - Data - Objects) 는 오라클 서버, 마이크로소프트 SQL 서버를 비롯한 거의 모든 데이터베이스 서버에 접속할 수 있다는 장점이 있다.
일반적으로 PDO를 사용한 코드가 다른 라이브러리를 쓴 코드보다 작성하기 쉽고 더 잘 읽힌다.
준비된 구문과 명명 매개변수 기능도 PDO의 중요한 장점으로 꼽힌다.
<?php | |
try { | |
$pdo = new PDO('mysql:host=localhost;dbname=ijdb_sample', 'ijdb_sample', 'mypassword'); | |
$output = '데이터베이스 접속 성공.'; | |
} | |
catch (PDOException $e) { | |
$output = '데이터베이스 서버에 접속할 수 없습니다: ' . $e; | |
} | |
include __DIR__ . '/../templates/output.html.php'; |
$pdo : PDO라는 함수가 반환하는 객체를 담는 변수. 나중에 데이터베이스를 조작할 때 사용함
$e : PDO의 예외사항을 담는 변수. 자세한 오류메세지를 비롯해 예외에 대한 여러 정보를 제공한다.
<create 예문>
$sql = "CREATE TABLE IF NOT EXISTS joke
(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
joketext TEXT,
jokedate DATE NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
INSERT INTO joke (joketext, jokedate) values ('jokes','2014-04-22')";
$query는 실행하고자 하는 SQL 쿼리 문자열을 담는다.
query( ) 메서드는 exec()처럼 SQL 쿼리를 전달받아 데이터베이스 서버로 전송하지만 exec()와 달리 PDOStatement 객체를 반환한다. 쿼리 실행 결과로 반환된 모든 로우의 목록이 이 객체에 담긴다.
while( $row = $result->fetch() ) {
// 로우처리
}
fetch() 메서드는 결과 집합의 로우를 하나씩 배열로 반환하다가 더는 반환할 로우가 없으면 false를 반환한다.
$row = $result->fetch() 구문은 $row 변수에 값을 할당하는 동시에 구문 자체가 값을 나타낸다.
fetch()는 연관 배열 형태로 결과 로우를 반환하는데, 이 배열의 각 키는 테이블의 칼럼명과 같다. 결과 로우가 $row에 저장되면 joketext 칼럼에 저장된 값은 $row['joketext'] 로 가져온다. // joketext의 값을 가져옴
fetch와 관련된 사이트 *https://oddly.tistory.com/8
php의 배열 : while, for < foreach
foreach( 배열 as 변수명){ ... }
mysql - php 연동해서 불러오기
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=ninja_test;charset=utf8','tester','tester1234');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = 'SELECT * FROM joke';
$st = $pdo-> query($sql);
$st->execute();
// Fetch 모드를 설정
$st->setFetchMode(PDO::FETCH_ASSOC);
// 1 row 씩 가져오기
while($row= $st->fetch()) {
echo$row['joketext'].'<br/>';
}
}
catch (PDOException $e) {
$output = '데이터베이스 오류: ' . $e->getMessage() . ', 위치: ' .
$e->getFile() . ':' . $e->getLine();
}
include __DIR__.'/output.html.php';
#문제
1. 한글지원 -> 설정파일에서 uft8로 다 변경했음. 콘솔에선 깨지고 php로 본 화면에서는 정상적 작동
문제는 콘솔에서 한글이 안나오는것!! (그럼 직접 입력하면 한글안되나? 한글이 입력이 안됨...)