본문 바로가기
Develop/PHP

PHP PDO MYSQL 연동

by J0DEV 2021. 8. 11.
반응형

php로 개발을 하다보면 db와의 연동은 필수적인 요소라고 할 수 있습니다.

 

php 5버전부터 제공되는 PDO는 PHP DATA OBJECT의 약자로서

 

여러가지 데이터베이스를 제어하는 방법을 표준화 시킨 것입니다.

 

다양한 데이터베이스를 동일한 방법으로 제어가능하며 데이터베이스에 접근할 떄 pdo의 사용을 권장하고 있습니다.

 

필요한 패키지 및 라이브러리들을 설치한 후, php에서 MYSQL에 연결하기 위해 접속 정보들을 셋팅하고 테스트를 진행해봐야합니다.

 

db_init을 작성합니다.

<?php
//데이터베이스 로그인 또는 기타 정보들 

//db설정
$dbServer = '';
$dbUser = '';
$dbPass = '';
$dbName = '';

//Mysql DSN 문자열
$dsn = "mysql:host={$dbServer};dbname={$dbName};charset=utf8";
try {
	//MYSQL db 접속
	$dbh = new PDO($dsn, $dbUser, $dbPass);
	//준비된 명령문의 에뮬레이션 비활성화
	$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
	//ERROR 발생시 예외 발생
	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

} catch (PDOException $e) {
	echo 'ERROR : ' . h($e->getMessage());
}

?>

 

이렇게 db_init.php를 작성하면

 

데이터베이스에 접근할 때,

 

include로 db_init.php를 불러오기만 하면 됩니다.

 

<?php
include "db_init.php";
$userid = '';
$userpw = '';
$stmt = $dbh->prepare('select * from tablename where userid=:userid and userpw=:userpw');
$stmt->bindParam(':userid', $userid);
$stmt->bindParam(':userpw', $hash);
$stmt->execute();
?>

 

위의 코드를 보면 db_init.php를 include한 후,

 

쿼리문을 작성하여 실행시킵니다.

 

pdo는 prepare문을 사용하여 쿼리를 작성한 후,

 

넣을 인자를 ":userid"로 선언합니다.

 

그리고 bindParam을 통해서 인자에 값을 넣어줍니다.

 

 

여기서 prepare문과 bindParam을 사용하면

 

인자를 파라미터로만 인식하여

 

이스케이핑 처리를 하지 않아도

 

sql_injection을 방어할 수 있습니다.

 

(물론 동적으로 쿼리를 생성할 경우 injection이 발생할 수 있습니다.)

 

여기까지 pdo로 db를 연동하는 법을 알아보았습니다.

 

 

 

 

 

 

반응형