現在の位置: ホーム> 最新記事一覧> 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クラス(usermodel.php)を作成する

次に、ユーザー関連のデータベース操作を処理するUsermodelクラスを作成します。ここでは、 mysqli :: stmt_init関数を使用して、preprocessingステートメントを初期化し、ユーザーデータを挿入します。

 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アーキテクチャでデータベース操作を優雅に処理し、将来の拡張のための優れた基盤を提供できます。