현재 위치: > 최신 기사 목록> MVC 아키텍처에서 STMT_INIT를 올바르게 사용하는 방법

MVC 아키텍처에서 STMT_INIT를 올바르게 사용하는 방법

M66 2025-06-02

php에서 mysqli :: stmt_init는 mysqli 확장 프로그램의 함수이며, 주로 새로운 mysqli_stmt 객체를 초기화하는 데 사용됩니다. 이것은 준비된 진술을 실행하는 데 매우 중요합니다. 전처리 명세서를 사용하면 SQL 주입과 같은 보안 문제를 피하고 데이터베이스 쿼리의 효율성을 향상시킬 수 있습니다.

2. MVC 아키텍처의 데이터베이스 작업

MVC 아키텍처에서 데이터베이스 작업은 일반적으로 모델 계층에 있습니다. 이 모델은 데이터의 획득 및 스토리지 처리를 담당하는 반면 컨트롤러 계층은 사용자 요청을 처리하고 해당 모델 메소드를 호출 할 책임이 있습니다. 우리의 경우, 우리는 모델 계층의 데이터베이스 작업에 mysqli :: stmt_init을 사용합니다.

3. 구현 단계

데이터베이스에 사용자 정보를 삽입하려는 간단한 사용자 관리 시스템이 있다고 가정합니다. 데이터베이스 테이블 구조는 다음과 같습니다.

 CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(255) NOT NULL,
    email VARCHAR(255) NOT NULL
);

사용자 데이터 삽입 작업을 처리하기 위해 모델 계층에서 메소드를 작성합니다.

1 단계 : 데이터베이스 연결 클래스 (database.php)

먼저 데이터베이스에 연결하기 위해 데이터베이스 연결 클래스를 작성해야합니다. 데이터베이스 연결 정보를 별도의 클래스에 저장한다고 가정합니다.

 class Database {
    private $host = 'localhost';
    private $username = 'root';
    private $password = '';
    private $database = 'test_db';
    public $conn;

    public function __construct() {
        $this->conn = new mysqli($this->host, $this->username, $this->password, $this->database);
        if ($this->conn->connect_error) {
            die("Connection failed: " . $this->conn->connect_error);
        }
    }
}
2 단계 : usermodel class (usermodel.php) 생성

다음으로 사용자 관련 데이터베이스 작업을 처리하는 USERMODEL 클래스를 만듭니다. 여기서 MySQLI :: STMT_INIT 함수를 사용하여 전처리 명령문을 초기화하고 사용자 데이터를 삽입합니다.

 class UserModel {
    private $db;

    public function __construct() {
        $this->db = new Database();
    }

    public function addUser($username, $email) {
        // 초기화 준비 진술
        $stmt = $this->db->conn->stmt_init();

        // 준비 진술이 성공했는지 확인하십시오
        if ($stmt->prepare("INSERT INTO users (username, email) VALUES (?, ?)")) {
            // 바인딩 매개 변수
            $stmt->bind_param("ss", $username, $email);

            // 실행 진술
            if ($stmt->execute()) {
                echo "User added successfully!";
            } else {
                echo "Error: " . $stmt->error;
            }

            // 가까운 진술
            $stmt->close();
        } else {
            echo "Prepare failed: " . $this->db->conn->error;
        }
    }
}
3 단계 : 컨트롤러 계층 호출 (usercontroller.php)

컨트롤러 계층에서 usermodel 클래스 메소드를 호출하여 데이터베이스 작업을 수행합니다. 우리는 사용자가 입력 한 데이터를 가져 와서 AddUser 메소드로 전달합니다.

 class UserController {
    private $model;

    public function __construct() {
        $this->model = new UserModel();
    }

    public function createUser($username, $email) {
        // 부르다 UserModel 클래스 삽입 사용자 데이터
        $this->model->addUser($username, $email);
    }
}
4 단계 : 프론트 엔드 페이지는 사용자와 상호 작용합니다

마지막으로 프론트 엔드 페이지에서 사용자가 데이터를 입력 할 수있는 간단한 양식을 제공합니다. 양식 데이터는 데이터베이스 작업의 컨트롤러 계층을 통해 모델에 제출됩니다.

 <form method="POST" action="create_user.php">
    <label for="username">Username:</label>
    <input type="text" id="username" name="username" required>
    
    <label for="email">Email:</label>
    <input type="email" id="email" name="email" required>
    
    <button type="submit">Create User</button>
</form>

create_user.php 파일에서 컨트롤러를 통해 사용자를 만듭니다.

 include 'UserController.php';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $username = $_POST['username'];
    $email = $_POST['email'];

    $controller = new UserController();
    $controller->createUser($username, $email);
}

4. 요약

MVC 아키텍처에서 데이터베이스 작업에 mysqli :: stmt_init 함수를 올바르게 사용하면 코드의 보안 및 효율성이 향상 될 수 있습니다. 전처리 명세서를 사용하면 SQL 주입의 위험이 피하고 코드는 명확하고 유지 관리가 쉽습니다. 이 예에서는 모델 계층에서 데이터베이스 작업을 캡슐화하고 컨트롤러 계층은 프론트 엔드와 상호 작용하여 각 계층의 책임을 분리 할 책임이 있습니다.

이러한 방식으로 MVC 아키텍처에서 데이터베이스 작업을 우아하게 처리하고 향후 확장을위한 좋은 기초를 제공 할 수 있습니다.