當前位置: 首頁> 最新文章列表> 在MVC 架構中正確使用stmt_init 的方法

在MVC 架構中正確使用stmt_init 的方法

M66 2025-06-02

在PHP 中, mysqli::stmt_initmysqli擴展中的一個函數,主要用於初始化一個新的mysqli_stmt對象。這對於執行預處理語句(Prepared Statements)非常重要。通過使用預處理語句,我們可以避免SQL 注入等安全問題,並提高數據庫查詢的效率。

2. MVC 架構中的數據庫操作

在MVC 架構中,數據庫操作通常位於Model 層。 Model 負責處理數據的獲取和存儲,而Controller 層則負責處理用戶請求並調用相應的Model 方法。在我們的案例中,我們將在Model 層中使用mysqli::stmt_init進行數據庫操作。

3. 實現步驟

假設我們有一個簡單的用戶管理系統,我們希望在數據庫中插入用戶信息。我們的數據庫表結構如下:

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

我們將在Model層創建一個方法來處理插入用戶數據的操作。

步驟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函數初始化預處理語句,並插入用戶數據。

 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:Controller 層調用(UserController.php)

在Controller 層,我們通過調用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:前端頁面與用戶交互

最後,在前端頁面中,我們提供一個簡單的表單,供用戶輸入數據。表單數據將通過Controller 層提交給Model 進行數據庫操作。

 <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文件中,我們通過Controller 創建用戶:

 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 注入的風險,並使得代碼更加清晰和易於維護。在本例中,我們將數據庫操作封裝在Model 層,Controller 層負責與前端交互,確保了各層職責的分離。

通過這種方式,你可以在MVC 架構中優雅地處理數據庫操作,並為未來的擴展提供良好的基礎。