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 サイトの他の関連記事を参照してください。