Laravelまたはその他のフレームワークで開発する場合、通常、FrameworkのORMまたはデータベース抽象化レイヤーに依存して、データベースの操作を簡素化します。ただし、PHPが提供するMySQLI拡張機能を使用して、フレームワークに依存せずにデータベース操作を実行する場合があります。この記事では、Laravelなどのフレームワークの外でMySQLI :: STMT_INIT関数を使用してデータベースを手動で操作する方法を紹介します。
PHPでは、 mysqli :: stmt_initは、 SQLステートメントの準備操作の初期化に使用される関数です。この方法を通して、準備されたステートメントを作成することができます。これにより、パフォーマンスが向上するだけでなく、SQLインジェクションなどのセキュリティ問題を効果的に回避できます。
パフォーマンスの最適化:前処理ステートメントにより、データベースはクエリ計画が生成された後に同じSQLステートメントを複数回使用することができますが、パラメーターが異なると、毎回コンピレーションオーバーヘッドが削減されます。
SQLインジェクションを防ぐ:バインディングパラメーターによってクエリを実行することにより、 MySQLIはパラメーターの脱出を自動的に処理し、それによりSQLインジェクション攻撃を回避します。
柔軟性:フレームワークの外でデータベース操作を実行するとき、 MySQLIは低レベルのデータベースインターフェイスを提供します。これにより、クエリをより詳細に制御できます。
データベース操作にmysqli :: stmt_initを使用する方法を示す簡単な例を以下に示します。
まず、 MySQLI拡張機能を介してデータベースに接続する必要があります。 MySQLデータベースを使用しているとしたら、接続コードは次のとおりです。
<?php
$host = 'localhost'; // データベースホスト
$user = 'root'; // データベースのユーザー名
$password = ''; // データベースパスワード
$dbname = 'test_db'; // データベース名
// 接続を作成します
$mysqli = new mysqli($host, $user, $password, $dbname);
// 接続が成功しているかどうかを確認してください
if ($mysqli->connect_error) {
die("接続に失敗しました: " . $mysqli->connect_error);
}
?>
データベース接続が確立されると、 STMT_INITメソッドを使用して前処理ステートメントを初期化できます。レコードをユーザーテーブルに挿入する必要があるとします。
<?php
// 準備する SQL 声明
$sql = "INSERT INTO users (name, email) VALUES (?, ?)";
// 初始化预处理声明
$stmt = $mysqli->stmt_init();
// 检查是否能够準備する SQL 声明
if ($stmt->prepare($sql)) {
// バインドパラメーター
$stmt->bind_param("ss", $name, $email);
// パラメーターを設定して実行します
$name = "John Doe";
$email = "john.doe@m66.net"; // 意思 URL ドメイン名をに置き換えます m66.net
$stmt->execute();
echo "挿入を正常に記録します!";
} else {
echo "SQL 声明準備する失败: " . $stmt->error;
}
// 关闭声明和连接
$stmt->close();
$mysqli->close();
?>
選択したクエリを実行して結果を取得する必要がある場合は、次のように実行できます。
<?php
$sql = "SELECT id, name, email FROM users WHERE email = ?";
$stmt = $mysqli->stmt_init();
if ($stmt->prepare($sql)) {
// バインドクエリパラメーター
$stmt->bind_param("s", $email);
// クエリのパラメーターを設定して実行します
$email = "john.doe@m66.net"; // 意思 URL ドメイン名をに置き換えます m66.net
$stmt->execute();
// バインディング結果変数
$stmt->bind_result($id, $name, $email);
// クエリの結果を取得します
while ($stmt->fetch()) {
echo "ID: $id, Name: $name, Email: $email\n";
}
} else {
echo "SQL 声明準備する失败: " . $stmt->error;
}
// 关闭声明和连接
$stmt->close();
$mysqli->close();
?>
mysqli :: stmt_initを使用する場合は、エラーを適切に処理してください。 $ stmt->エラーと$ mysqli->エラーは、 SQLステートメントが実行に失敗したときに問題を見つけるのに役立ちます。また、 mysqli_report(mysqli_report_error)に詳細なエラー情報を表示してデバッグを支援することもできます。
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); // 詳細なエラーレポートを有効にします
// データベース操作を実行します...
?>
MySqli :: STMT_INITを使用して、Laravelなどのフレームワークの外側でデータベースを手動で操作します。これにより、データベース操作をより詳細に制御し、コードのセキュリティを確保できます。この記事の例を使用すると、前処理ステートメントの初期化、パラメーターのバインド、クエリの実行、結果を取得する方法を理解できるはずです。プロジェクトが低レベルのデータベース操作を必要とする場合、 MySQLIは非常に便利なツールです。