ホームページ >バックエンド開発 >PHPチュートリアル >mysqli プリペアドステートメントを使用して動的 LIKE クエリを効率的に構築する方法

mysqli プリペアドステートメントを使用して動的 LIKE クエリを効率的に構築する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-03 08:23:10275ブラウズ

How to Efficiently Build Dynamic LIKE Queries with mysqli Prepared Statements?

mysqli プリペアド ステートメントを使用した動的 LIKE クエリ

この質問は、以下に基づいて可変数の LIKE 条件を持つプリペアド ステートメントを作成する問題を扱います。ユーザー入力。提供された PHP コードはステートメントを構築しようとしますが、LIKE 句の書式設定に関連するエラーがあります。

重要な問題は、パラメーター (?) の前後にパーセント記号 (%) が配置されている場所にあります。 LIKE句で。以下に示すように、パラメーターをラップする代わりに、パーセント記号をプレースホルダーの周りに配置する必要があります。

foreach ( $search_exploded as $search_each ) {
    $x ++;
    if ( $x == 1 ) {
        $construct .= "name LIKE %??%";
    } else {
        $construct .= " or name LIKE %??%";
    }
}

この修正により、パラメーター値 (例: "my name") が LIKE 句に正しくバインドされるようになります。 .

さらに、コードは連結文字列 ($construct) を使用して WHERE 句を構築します。ただし、より効率的で安全なアプローチは、以下に示すように、すべてのパラメーターにbind_param() プレースホルダー配列を使用することです。

$where_params = [];
foreach ( $search_exploded as $search_each ) {
    $where_params[] = "%{$search_each}%";
}

$query = "SELECT * FROM info WHERE name LIKE ?";
$stmt = mysqli_prepare( $conn, $query );
mysqli_stmt_bind_param( $stmt, "s", ...$where_params );

このメソッドは、任意の数の LIKE 条件を適切に処理し、SQL インジェクションのリスクを排除します。

これらの変更により、動的 LIKE クエリは複数のユーザー定義基準に基づいてレコードを正しく検索できるようになります。

以上がmysqli プリペアドステートメントを使用して動的 LIKE クエリを効率的に構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。