PHP 에서 데이터베이스에 연결하기 위한 API
<?php
$dbHost = "localhost"; // 호스트 주소(localhost, 120.0.0.1)
$dbName = "je_test"; // 데이타 베이스(DataBase) 이름
$dbUser = "????"; // DB 아이디
$dbPass = "????"; // DB 패스워드
$dbChar = "utf8"; // 문자 인코딩
try
{
$pdo = new PDO("mysql:host={$dbHost};dbname={$dbName};charset={$dbChar}", $dbUser, $dbPass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "서버와의 연결 성공!<br>";
$stmt = $pdo->prepare("SELECT * FROM test_table WHERE name = :name");
$stmt->bindValue(":name", "사람");
$stmt->execute();
$row = $stmt->fetch();
echo "<pre>";
print_r($row);
echo "</pre>";
}
catch(PDOException $ex)
{
echo "서버와의 연결 실패! : ".$ex->getMessage()."<br>";
}
?>
PHP가 실행되는 동안 발생하는 오류를 핸들링하기 위한 구문
지정된(예외적인) 에러 조건이 발생하면 코드 실행의 통상적인 흐름을 변경하는데 사용됨
이 조건을 예외(exception)이라 부름
try
{
//... 예외처리가 발생할 수 있는 소스코드 ...
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $ex)
{
//... 예외 발생시의 처리 ...
echo "서버와의 연결 실패! : ".$ex->getMessage()."<br>";
}
$변수 = new PDO("데이터베이스 종류:host=호스트;port=포트dbname=데이터베이스;charset=인코딩", 계정, 암호);
이 이후 이 객체에서 필요한 메소를 호출함.
$stmt = $pdo->prepare("SELECT * FROM test_table WHERE name = :name");
prepare로 준비하는 SQL구문은 파라미터를 가질 수 있다.
파라미터는 이름을 붙여주거나 물음표로 표시할 수 있다.
$name = '사람';
$stmt->bindValue(":name", $name);
$stmt2->bindParam(":name", $name);
$name = '코끼리';
//$stmt = // WHERE name = "사람"으로 실행된다.
//$stmt2 = // WHERE name = "코끼리"로 실행된다.
binValue 는 값 자체를 대입한다. 그래서 변수에 새로운 값을 넣어도 반영되지 않는다.
bindParam 은 변수를 대입한것이기 때문에 대입한 이후에 값을 변경할 수 있다.
$stmt->execute();
ㅇㄴㅇㅁㄴㅇㄴㅁㅇㅁㄴ
3-2. 쿼리 바로 실행 (query)
결론적으로는 execute()를 사용하는것이 가장 권장된다.
이유는 보안 때문이며 execute()만으로도 모든 기능들을 수행할 수 있기 때문이다.
하지만 사용자가 값을 입력하지 않는 쿼리의 경우 exec()를 사용할 수 있다.
쿼리를 실행시키기 위해 prepare() 메소드까지 준비해주어야 하는 execute()보다 비교적 코드도 간소하며 동작도 더 효율적이기 때문이다.
하지만 SELECT문 같은 경우는 반환값을 받아야 하므로 PDO객체를 반환하는 query()문을 사용할 수 있을 것이다.