MySQL 연결
PHP 5 이상은 다음을 사용하여 MySQL 데이터베이스에서 작동할 수 있다.
- MySQLi 확장 (“i”는 개선됨을 나타냄)
- PDO(PHP 데이터 개체)
MySQLi vs PDO
내가 선호하는 방식으로 사용하면 된다.
MySQLi와 PDO에는 모두 다음과 같은 장점이 있다.
PDO는 12개의 다른 데이터베이스 시스템에서 작동하지만 MySQLi는 MySQL 데이터베이스에서만 작동한다.
따라서 다른 데이터베이스를 사용하기 위해 프로젝트를 전환해야 하는 경우 PDO가 프로세스를 쉽게 만든다. 연결 문자열과 몇 가지 쿼리만 변경하면 된다.
MySQLi를 사용하면 쿼리가 포함된 전체 코드를 다시 작성해야 한다.
둘 다 객체 지향이지만 MySQLi는 절차적 API도 제공한다.
Prepared Statements는 SQL 주입으로부터 보호하며 웹 애플리케이션 보안에 매우 중요하다.
대부분의 경우 php5 mysql 패키지가 설치될 때 MySQLi 확장이 자동으로 설치된다.
MySQLi 객체 지향
PHP
<?php $servername = "localhost"; $username = "username"; $password = "password"; $conn = new mysqli($servername, $username, $password); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully"; ?>
MySQLi 절차
PHP
<?php $servername = "localhost"; $username = "username"; $password = "password"; $conn = mysqli_connect($servername, $username, $password); if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "Connected successfully"; ?>
PDO
PDO에서는 Database를 지정하지 않으면 예외가 발생한다.
PHP
<?php $servername = "localhost"; $username = "username"; $password = "password"; try { $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Connected successfully"; } catch(PDOException $e) { echo "Connection failed: " . $e->getMessage(); } ?>
PDO의 큰 이점은 데이터베이스 쿼리에서 발생할 수 있는 모든 문제를 처리할 수 있는 예외 클래스가 있다는 것이다.
try{ } 블록 내에서 예외가 발생하면 스크립트는 실행을 중지하고 첫 번째 catch(){ } 블록으로 직접 흐른다.
연결 닫기
스크립트가 종료되면 연결이 자동으로 닫힌다.
스크립트가 종료되기 전에 연결을 닫는 방법을 알아보자.
MySQLi 객체 지향
PHP
<?php $conn->close(); ?>
MySQLi 절차
PHP
<?php mysqli_close($conn); ?>
PDO
PHP
<?php $conn = null; ?>
참고
W3C School - PHP Connect to MySQL
W3C School - SQL Tutorial
W3C School - PHP Tryit Editor