PHP 개발에서 데이터베이스 연결은 기본적이고 중요한 링크입니다. 효율적이고 안전한 데이터베이스 연결 클래스는 개발 프로세스를 단순화 할뿐만 아니라 SQL 주입과 같은 보안 위험을 효과적으로 방지 할 수 있습니다. 이 기사는 Secure Connect () 기능을 캡슐화하고 SQL 주입을 방지하는 데이터베이스 연결 방법을 구현하는 방법을 소개합니다.
데이터베이스에 연결하기 위해 기본 MySQLI_CONNECT () 또는 PDO를 직접 사용하는 것이 편리하지만 캡슐화가 부족한 경우 코드를 반복하기 쉽고 유지 관리하기가 어렵습니다. 객체 지향 캡슐화를 통해 다음을 구현할 수 있습니다.
데이터베이스 연결 구성의 통합 관리
코드 재사용성을 향상시킵니다
중앙에서 예외 및 오류를 처리합니다
전처리 명령문으로 SQL 주입을 방지합니다
PHP의 데이터베이스 연결 인터페이스로 PDO (PHP Data Objects)를 사용하는 것이 좋습니다.
여러 데이터베이스를 지원하며 코드 이식성이 높습니다
SQL 주입을 방지하기위한 내장 전처리 명세서
완벽한 예외 처리 메커니즘
<?php
class Database {
private $host = 'localhost';
private $dbname = 'testdb';
private $username = 'root';
private $password = 'password';
private $pdo;
private $error;
// 건설자,연결을 초기화하십시오
public function __construct() {
$dsn = "mysql:host={$this->host};dbname={$this->dbname};charset=utf8mb4";
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 예외를 던지십시오
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // 기본 연관 배열
PDO::ATTR_EMULATE_PREPARES => false, // 시뮬레이션 전처리를 비활성화합니다,기본 전처리 사용
];
try {
$this->pdo = new PDO($dsn, $this->username, $this->password, $options);
} catch (PDOException $e) {
$this->error = $e->getMessage();
// 로그 또는 프로세스 오류
die("데이터베이스 연결이 실패했습니다: " . $this->error);
}
}
// 통합 쿼리 실행(SELECT)
public function query($sql, $params = []) {
$stmt = $this->pdo->prepare($sql);
$stmt->execute($params);
return $stmt->fetchAll();
}
// 첨가, 삭제 및 수정의 통합 실행(INSERT/UPDATE/DELETE)
public function execute($sql, $params = []) {
$stmt = $this->pdo->prepare($sql);
return $stmt->execute($params);
}
// 마지막 인서트를 가져옵니다ID
public function lastInsertId() {
return $this->pdo->lastInsertId();
}
}
?>
<?php
$db = new Database();
// 보안 쿼리 예:예방하다 SQL 주입
$userId = 123;
$result = $db->query("SELECT * FROM users WHERE id = :id", ['id' => $userId]);
// 안전한 삽입 예제
$name = '장 산';
$email = 'zhangsan@m66.net';
$insertSql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$db->execute($insertSql, ['name' => $name, 'email' => $email]);
?>
PDO 사전 처리 문을 사용하여 SQL 문은 데이터와 분리되며 사용자 입력은 SQL 문자열로 직접 스 플라이 싱되지 않습니다.
매개 변수 바인딩은 데이터베이스 드라이버가 특수 문자 탈출을 자동으로 처리 할 수 있도록합니다.
시뮬레이션 된 전처리를 비활성화하고 기본 전처리로 보안을 향상시킵니다
Connect () 함수로 데이터베이스 연결 클래스를 캡슐화하고 PDO를 기본 연결로 선택하고 전처리 문을 결합하는 것은 PHP에서 SQL 주입을 방지하기위한 효율적이고 안전한 솔루션입니다. 이 클래스의 디자인은 간단하고 확장하기 쉽고 대부분의 비즈니스 요구를 충족시킬 수 있으며 현대적인 PHP 개발에 권장되는 관행입니다.