ホームページ >バックエンド開発 >PHPチュートリアル >変数 LIKE 条件を使用して安全な MySQLi プリペアド ステートメントを作成する方法
mysqli プリペアド ステートメントとして変数 LIKE 条件を使用した SELECT クエリを構築する
ユーザー入力を扱う場合、次のような問題を防ぐためにステートメントを準備することが不可欠です。 SQL インジェクションを実行し、データの整合性を確保します。 LIKE 条件の数が可変の場合、これは困難になります。
問題の概要
コード スニペットは、ユーザー入力に基づいて LIKE 条件を動的に作成することで、この問題を解決しようとします。 。ただし、プリペアド ステートメントのパラメータを正しくフォーマットできません。
解決策
解決策は、プレースホルダではなくパラメータの前後に % ワイルドカードを配置することです。これにより、クエリのフィルタリングにパラメータが確実に使用されます。
詳細な説明
成分の初期化:
a. OR を使用して WHERE 句式の配列を作成します。
b.値のデータ型 (この場合は文字列) を決定します。
c.データ型とパラメータを単一の配列に結合します。
条件の準備:
a.ユーザー入力を一意の値の配列に変換します。
b.値ごとに、LIKE 式を作成します。
c.データ型とワイルドカード値を含めるようにパラメーター配列を更新します。
クエリの準備:
a。基本的な SELECT * クエリから始めます。
b.条件がある場合は、動的式を含む WHERE 句を追加します。
パラメータをバインドして実行します:
a。スプラット演算子 (...) を使用して、パラメーター配列をプリペアド ステートメントにバインドします。
b.ステートメントを実行し、結果があれば取得します。
コード例:
$string = "Bill N_d Dave"; $conditions = []; $parameters = ['']; foreach (array_unique(explode(' ', $string)) as $value) { $conditions[] = "name LIKE ?"; $parameters[0] .= 's'; $parameters[] = "%{$value}%"; } $query = "SELECT * FROM info"; if ($conditions) { $stmt = $mysqli->prepare($query . ' WHERE ' . implode(' OR ', $conditions)); $stmt->bind_param(...$parameters); $stmt->execute(); $result = $stmt->get_result(); } else { $result = $conn->query($query); } foreach ($result as $row) { echo "<div>{$row['name']}</div>\n"; }
補足:
以上が変数 LIKE 条件を使用して安全な MySQLi プリペアド ステートメントを作成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。