현재 위치: > 최신 기사 목록> Secure Connect () 데이터베이스 연결 클래스를 캡슐화하는 방법

Secure Connect () 데이터베이스 연결 클래스를 캡슐화하는 방법

M66 2025-05-24

PHP 개발에서 데이터베이스 연결은 기본적이고 중요한 링크입니다. 효율적이고 안전한 데이터베이스 연결 클래스는 개발 프로세스를 단순화 할뿐만 아니라 SQL 주입과 같은 보안 위험을 효과적으로 방지 할 수 있습니다. 이 기사는 Secure Connect () 기능을 캡슐화하고 SQL 주입을 방지하는 데이터베이스 연결 방법을 구현하는 방법을 소개합니다.


1. 데이터베이스 연결 클래스를 캡슐화해야합니다

데이터베이스에 연결하기 위해 기본 MySQLI_CONNECT () 또는 PDO를 직접 사용하는 것이 편리하지만 캡슐화가 부족한 경우 코드를 반복하기 쉽고 유지 관리하기가 어렵습니다. 객체 지향 캡슐화를 통해 다음을 구현할 수 있습니다.

  • 데이터베이스 연결 구성의 통합 관리

  • 코드 재사용성을 향상시킵니다

  • 중앙에서 예외 및 오류를 처리합니다

  • 전처리 명령문으로 SQL 주입을 방지합니다

2. 연결 방법으로 PDO를 선택하십시오

PHP의 데이터베이스 연결 인터페이스로 PDO (PHP Data Objects)를 사용하는 것이 좋습니다.

  • 여러 데이터베이스를 지원하며 코드 이식성이 높습니다

  • SQL 주입을 방지하기위한 내장 전처리 명세서

  • 완벽한 예외 처리 메커니즘

3. 샘플 코드 : 안전하고 효율적인 Connect () 클래스

 <?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();
    }
}

?>

IV. 예제를 사용하십시오

 <?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]);

?>

5.이 설계가 왜 SQL 주입을 방지 할 수 있습니까?

  • PDO 사전 처리 문을 사용하여 SQL 문은 데이터와 분리되며 사용자 입력은 SQL 문자열로 직접 스 플라이 싱되지 않습니다.

  • 매개 변수 바인딩은 데이터베이스 드라이버가 특수 문자 탈출을 자동으로 처리 할 수 ​​있도록합니다.

  • 시뮬레이션 된 전처리를 비활성화하고 기본 전처리로 보안을 향상시킵니다

6. 요약

Connect () 함수로 데이터베이스 연결 클래스를 캡슐화하고 PDO를 기본 연결로 선택하고 전처리 문을 결합하는 것은 PHP에서 SQL 주입을 방지하기위한 효율적이고 안전한 솔루션입니다. 이 클래스의 디자인은 간단하고 확장하기 쉽고 대부분의 비즈니스 요구를 충족시킬 수 있으며 현대적인 PHP 개발에 권장되는 관행입니다.