php에서 mysqli :: stmt_init는 mysqli 확장 프로그램의 함수이며, 주로 새로운 mysqli_stmt 객체를 초기화하는 데 사용됩니다. 이것은 준비된 진술을 실행하는 데 매우 중요합니다. 전처리 명세서를 사용하면 SQL 주입과 같은 보안 문제를 피하고 데이터베이스 쿼리의 효율성을 향상시킬 수 있습니다.
MVC 아키텍처에서 데이터베이스 작업은 일반적으로 모델 계층에 있습니다. 이 모델은 데이터의 획득 및 스토리지 처리를 담당하는 반면 컨트롤러 계층은 사용자 요청을 처리하고 해당 모델 메소드를 호출 할 책임이 있습니다. 우리의 경우, 우리는 모델 계층의 데이터베이스 작업에 mysqli :: stmt_init을 사용합니다.
데이터베이스에 사용자 정보를 삽입하려는 간단한 사용자 관리 시스템이 있다고 가정합니다. 데이터베이스 테이블 구조는 다음과 같습니다.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL
);
사용자 데이터 삽입 작업을 처리하기 위해 모델 계층에서 메소드를 작성합니다.
먼저 데이터베이스에 연결하기 위해 데이터베이스 연결 클래스를 작성해야합니다. 데이터베이스 연결 정보를 별도의 클래스에 저장한다고 가정합니다.
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);
}
}
}
다음으로 사용자 관련 데이터베이스 작업을 처리하는 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;
}
}
}
컨트롤러 계층에서 usermodel 클래스 메소드를 호출하여 데이터베이스 작업을 수행합니다. 우리는 사용자가 입력 한 데이터를 가져 와서 AddUser 메소드로 전달합니다.
class UserController {
private $model;
public function __construct() {
$this->model = new UserModel();
}
public function createUser($username, $email) {
// 부르다 UserModel 클래스 삽입 사용자 데이터
$this->model->addUser($username, $email);
}
}
마지막으로 프론트 엔드 페이지에서 사용자가 데이터를 입력 할 수있는 간단한 양식을 제공합니다. 양식 데이터는 데이터베이스 작업의 컨트롤러 계층을 통해 모델에 제출됩니다.
<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);
}
MVC 아키텍처에서 데이터베이스 작업에 mysqli :: stmt_init 함수를 올바르게 사용하면 코드의 보안 및 효율성이 향상 될 수 있습니다. 전처리 명세서를 사용하면 SQL 주입의 위험이 피하고 코드는 명확하고 유지 관리가 쉽습니다. 이 예에서는 모델 계층에서 데이터베이스 작업을 캡슐화하고 컨트롤러 계층은 프론트 엔드와 상호 작용하여 각 계층의 책임을 분리 할 책임이 있습니다.
이러한 방식으로 MVC 아키텍처에서 데이터베이스 작업을 우아하게 처리하고 향후 확장을위한 좋은 기초를 제공 할 수 있습니다.