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関数を使用して、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;
}
}
}
コントローラーレイヤーでは、 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アーキテクチャでデータベース操作を優雅に処理し、将来の拡張のための優れた基盤を提供できます。