現在の位置: ホーム> 最新記事一覧> mysqli :: stmt_initを使用して効率的なキーワードファジー検索を実装する方法(クエリなど)

mysqli :: stmt_initを使用して効率的なキーワードファジー検索を実装する方法(クエリなど)

M66 2025-06-23

データベースクエリは、PHPアプリケーションを開発する際の最も一般的な操作の1つです。特に大量のデータ量を扱う場合、クエリ効率を改善する方法が焦点です。 PHPでは、 MySQLI拡張機能を使用してデータベースクエリを実行することが非常に一般的であり、 MySQLI :: STMT_INITは、前処理ステートメントを実行し、クエリの効率とセキュリティを改善するのに役立つ優れたツールです。

この記事では、 MySQLI :: STMT_INIT使用して効率的なキーワードファジー検索を実現する方法を紹介します。

1。プレシングステートメントとmysqli :: stmt_init

PHPでは、 MySQLIはMySQLI :: STMT_INITメソッドを提供して、前処理ステートメントを初期化します。これは、SQLクエリがプリコンパイルされ、バインディングパラメーターによって実行されることを意味し、SQL注入のリスクを回避します。前処理ステートメントは、セキュリティを提供するだけでなく、同じクエリを実行するときにパフォーマンスを向上させます。

文法

$stmt = $mysqli->stmt_init();

2。ファジークエリのように使用する理由

同じように、キーワードはSQLでファジークエリを実装するためによく使用されます。通常、特定のパターンに一致する文字列を見つけるために使用されます。ファジークエリでは、 %は任意の文字(ゼロ文字を含む)を表し、 _は単一の文字を表します。

例えば:

 SELECT * FROM users WHERE username LIKE '%admin%';

このクエリは、管理者を含むユーザー名のすべてのレコードを返します。

3. mysqli :: stmt_initを使用し、効率的なファジー検索を実装したい

次に、 MySQLI :: STMT_INITを使用して、効率的なキーワードファジー検索を実装する方法を示します。データベースからユーザーを検索する必要があると仮定します。検索条件には、ユーザー名が特定のキーワードが含まれていることです。

ステップ1:データベース接続を初期化します

まず、データベースに接続する必要があります。

 $mysqli = new mysqli("localhost", "username", "password", "database");

// 接続を確認してください
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}

ステップ2:前処理ステートメントを初期化します

mysqli :: stmt_initを使用して、前処理ステートメントオブジェクトを初期化します。

 $stmt = $mysqli->stmt_init();

ステップ3:ファジークエリステートメントを作成します

次に、ファジークエリのように使用します。私たちは使用しますか SQL注入の問題を回避するためのパラメーターの代わりに:

 $sql = "SELECT * FROM users WHERE username LIKE ?";

ステップ4:パラメーターをバインドします

ユーザーが入力した検索キーワードにバインドする必要がありますか SQLステートメントで、同様のクエリにを追加して、ファジーマッチを示します。

 $searchKeyword = "%$keyword%";  // ユーザーが入力したキーワード,前後にパーセンテージサインを追加します
$stmt->prepare($sql);
$stmt->bind_param("s", $searchKeyword);  // "s" 文字列のバインディングを表すパラメーター

ステップ5:クエリを実行します

クエリを実行して結果を取得します。

 $stmt->execute();
$result = $stmt->get_result();

ステップ6:結果を処理します

クエリの結果を取得し、 get_result()を介して処理します。たとえば、結果をブラウザに出力します。

 while ($row = $result->fetch_assoc()) {
    echo "User ID: " . $row['id'] . " - Username: " . $row['username'] . "<br>";
}

ステップ7:接続を閉じます

クエリが完了したら、データベース接続を閉じることを忘れないでください。

 $stmt->close();
$mysqli->close();

4。概要

MySQLI :: STMT_INITおよび前処理ステートメントを使用することにより、SQL注入を効果的に防止し、クエリパフォーマンスを改善できます。特にFuzzyクエリにLikeを使用する場合、事前処理ステートメントは、ユーザーが入力したデータからクエリを分離し、セキュリティと効率を向上させることができます。

さらに、一部のシナリオではクエリのようにクエリが非常に役立つが、ファジークエリは大量のデータを処理する際にパフォーマンスの問題を引き起こす可能性があることに注意する価値があります。データベースのインデックス作成またはその他の最適化測定を通じて、クエリ効率をさらに改善することを検討することができます。