PHP MySQL Connect
PHP MySQL 연결하기 (MySQL Connect)
PHP에서 MySQL 데이터베이스와 연결하기 위해서는 MySQLi
(MySQL Improved) 또는
PDO
(PHP Data Objects) 방법을 사용할 수 있습니다. 이 두 가지 방법 모두 MySQL 데이터베이스에 안전하게
연결하고, 쿼리를 실행하며, 데이터를 처리하는 데 사용됩니다.
이 가이드에서는 PHP와 MySQL을 연결하는 방법, MySQLi와 PDO의 사용법, 그리고 데이터베이스 연결 후 확인 방법을 설명합니다.
1. MySQL 데이터베이스 연결
1.1 MySQLi
로 연결 (객체 지향 방식)
MySQLi는 MySQL 데이터베이스와의 상호작용을 처리하기 위한 향상된 확장 라이브러리입니다. 여기서는 객체 지향 방식을 사용해 MySQL에 연결하는 방법을 설명합니다.
<?php
// MySQL 연결 정보
$host = "localhost";
$username = "root";
$password = "";
$database = "my_database";
// MySQL 데이터베이스에 연결
$conn = new mysqli($host, $username, $password, $database);
// 연결 확인
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
설명:
new mysqli()
: MySQLi 객체를 생성하여 데이터베이스에 연결합니다.$conn->connect_error
: 연결이 실패하면 오류 메시지를 출력하고 스크립트를 종료합니다.localhost
: 데이터베이스 서버가 로컬에 있을 때 사용하는 호스트 이름.root
: 기본 MySQL 사용자 이름.my_database
: 연결할 데이터베이스 이름.
1.2 MySQLi
로 연결 (절차적 방식)
MySQLi는 절차적 방식으로도 사용할 수 있습니다. 이 방식은 함수 기반으로 데이터베이스에 연결합니다.
<?php
// MySQL 연결 정보
$host = "localhost";
$username = "root";
$password = "";
$database = "my_database";
// 데이터베이스 연결
$conn = mysqli_connect($host, $username, $password, $database);
// 연결 확인
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>
설명:
mysqli_connect()
: 절차적 방식으로 MySQL 데이터베이스에 연결하는 함수.mysqli_connect_error()
: 연결 실패 시 오류 메시지를 반환합니다.
1.3 PDO
로 연결
PDO는 다양한 데이터베이스를 지원하는 범용적인 데이터베이스 연결 인터페이스입니다. MySQL뿐만 아니라 여러 데이터베이스 시스템과 연동할 수 있다는 장점이 있습니다.
<?php
// 데이터베이스 연결 정보
$host = "localhost";
$dbname = "my_database";
$username = "root";
$password = "";
try {
// PDO 객체 생성 및 데이터베이스 연결
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
// 에러 모드를 예외 처리 방식으로 설정
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
설명:
new PDO()
: PDO 객체를 생성하고 MySQL 데이터베이스에 연결합니다.setAttribute()
: 에러 모드를 예외 처리 방식으로 설정합니다. 이는 코드에서 발생하는 오류를 더 잘 처리할 수 있도록 도와줍니다.try-catch
: PDO에서는 예외 처리를 통해 데이터베이스 연결 오류를 캡처하고 처리할 수 있습니다.
2. 데이터베이스 연결 후 확인
데이터베이스에 연결된 후, 연결이 성공적인지 확인하기 위해서는 연결 상태를 체크하는 것이 중요합니다. 위의 예제에서는 각각 MySQLi와 PDO에서
connect_error
또는 예외 처리를 통해 연결 상태를 확인하고 있습니다.
2.1 MySQLi 연결 확인 예제
<?php
$conn = new mysqli("localhost", "root", "", "my_database");
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
- 이 코드에서 **
connect_error
*는 연결 실패 시 오류 메시지를 출력하고 스크립트를 종료합니다. 성공 시에는 "Connected successfully" 메시지를 출력합니다.
2.2 PDO 연결 확인 예제
<?php
try {
$pdo = new PDO("mysql:host=localhost;dbname=my_database", "root", "");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
- PDO에서는
try-catch
블록을 사용하여 데이터베이스 연결이 실패할 경우 예외를 발생시키고, 해당 오류 메시지를 출력합니다.
3. 데이터베이스 연결 해제
PHP 스크립트가 끝나면 MySQL 연결은 자동으로 종료되지만, 명시적으로 연결을 해제하고 싶을 때는 다음과 같이 할 수 있습니다.
3.1 MySQLi 연결 해제
<?php
$conn->close(); // 연결 해제
?>
3.2 PDO 연결 해제
<?php
$pdo = null; // 연결 해제
?>
- PDO 연결은 **
null
*로 설정하여 해제할 수 있습니다. 이는 명시적으로 연결을 종료하는 좋은 방법입니다.
4. 데이터베이스 연결 시 보안 고려 사항
4.1 SQL 인젝션 방지
데이터베이스와 상호작용할 때, 특히 사용자 입력을 기반으로 쿼리를 실행하는 경우 SQL 인젝션 공격을 방지하는 것이 매우 중요합니다. 파라미터화된 쿼리나 프리페어드 스테이트먼트를 사용하여 보안을 강화할 수 있습니다.
MySQLi에서의 예시:
<?php
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
PDO에서의 예시:
<?php
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stmt->execute(['username' => $username]);
설명:
- Prepared Statements: SQL 쿼리를 미리 준비하고, 파라미터 바인딩을 통해 쿼리를 실행하는 방식으로 SQL 인젝션을 방지할 수 있습니다.
4.2 오류 메시지 숨기기
생산 환경에서는 데이터베이스 연결 오류 메시지를 사용자에게 직접 보여주지 않는 것이 좋습니다. 대신, 로그 파일에 오류를 기록하고 일반적인 메시지를 사용자에게 제공하는 방식으로 보안을 강화할 수 있습니다.
<?php
try {
$pdo = new PDO("mysql:host=localhost;dbname=my_database", "root", "");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch (PDOException $e) {
error_log($e->getMessage()); // 로그 파일에 기록
echo "Could not connect to the database.";
}
?>
설명:
- *
error_log()
*를 사용하여 오류를 로그 파일에 저장하고, 사용자에게는 단순한 오류 메시지만 표시합니다.
요약
PHP와 MySQL을 연결하는 방법에는 MySQLi와 PDO 두 가지가 있으며, 각각 장단점이 있습니다. MySQLi는 MySQL 전용이지만 절차적 및 객체 지향 방식을 모두 지원하며, PDO는 여러 데이터베이스 시스템을 지원하는 범용 인터페이스입니다. 데이터베이스 연결 시 SQL 인젝션 방지와 같은 보안 고려 사항을 준수하는 것이 중요합니다.