PHPでは、 MySQLI拡張機能は強力なMySQLデータベース操作関数を提供します。ここでは、MySQLI :: STMT_INIT関数は、前処理ステートメントの初期化に使用される重要な関数です。この記事では、 MySQLI :: STMT_INIT関数を使用してMySQLステートメントを初期化および準備する方法について詳しく説明します。
前処理ステートメントは、SQLの実行効率とセキュリティを改善するためのMySQLが提供するテクノロジーです。プリプロセシングステートメントを使用して、SQLクエリは解析のためにデータベースサーバーに送信され、実行時にデータが渡されます。これにより、実行効率が向上するだけでなく、SQLインジェクションなどのセキュリティ問題を効果的に防止します。
PHPでは、データベース操作にMySQLI拡張機能を使用する場合、 STMT_INITメソッドを介してプレ前処理ステートメントオブジェクトを初期化し、 PREPERE()メソッドを使用してSQLステートメントを準備できます。
mysqli :: stmt_init関数は、preprocessingステートメントを実行するために必要なmysqli_stmtオブジェクトを作成するために使用されます。
$stmt = $mysqli->stmt_init();
ここで、 $ mysqliは有効なmysqli接続オブジェクトです。
<?php
// に接続します MySQL データベース
$mysqli = new mysqli("localhost", "username", "password", "database_name");
// 接続が成功しているかどうかを確認してください
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
// プリプロセシングステートメントオブジェクトを初期化します
$stmt = $mysqli->stmt_init();
// 初期化が成功したかどうかを確認してください
if ($stmt === false) {
die("Failed to initialize statement.");
}
// 準備する SQL 声明
$query = "SELECT id, name FROM users WHERE email = ?";
if ($stmt->prepare($query)) {
// バインドパラメーター
$stmt->bind_param("s", $email); // 's' 文字列タイプを表します
// パラメーター値を設定します
$email = "user@m66.net";
// 执行声明
$stmt->execute();
// バインディング結果
$stmt->bind_result($id, $name);
// クエリの結果を取得します
while ($stmt->fetch()) {
echo "ID: $id, Name: $name\n";
}
// 关闭声明
$stmt->close();
} else {
echo "Failed to prepare statement.";
}
// 关闭データベース连接
$mysqli->close();
?>
データベース<br>に接続します 新しいmysqli()を使用してMySQLデータベースに接続し、接続が成功したかどうかを確認します。
前処理ステートメントの初期化<br> $ mysqli-> stmt_init()を呼び出して、プリプロセシングステートメントオブジェクト$ stmtを初期化します。 falseが返された場合、それは初期化が失敗したことを意味します。
SQLステートメントを準備<BR> $ stmt-> prepare($ query)メソッドを使用して、SQLステートメントを準備します。 ?クエリのパラメーターを表すプレースホルダーです。
バインドパラメーター<br> $ stmt-> bind_param()メソッドを使用して、実際のパラメーターをプリプロシングステートメントのプレースホルダーにバインドします。 「S」とは、このパラメーターが文字列型であることを意味します。
実行ステートメント<br> $ stmt-> execute()を使用して、SQLクエリを実行します。
バインディング結果<br> $ stmt-> bind_result()を使用して、クエリ結果をPHP変数にバインドします。
クエリの結果を取得<br> $ stmt-> fetch()を使用してクエリの結果を取得し、バウンド変数を介して出力します。
閉じる声明と接続<br> $ stmt-> close()を使用してプリプロセシングステートメントオブジェクトを閉じ、最後に$ mysqli-> close()を使用してデータベース接続を閉じます。
パフォーマンスの向上<BR> 前処理ステートメントは、SQLクエリ分析プロセスを事前に実行することにより、同じクエリを複数回実行する効率を大幅に改善できます。
SQL注入を防ぐ<br> 結合パラメーターにより、 MySQLIはSQL注入攻撃を効果的に回避できます。
管理してメンテナンスしやすい<br> STMT_INIT関数を使用してステートメントオブジェクトを初期化し、コード構造をより明確かつ維持しやすくします。