ユーザーは可変数の検索語を入力でき、対応するクエリは、これらの用語に基づいて動的に構築する必要があります。目的は、この動的入力に対応するプリペアド ステートメントを作成することです。
クエリ式の構築:
各検索語をバインド値のプレースホルダーを使用した LIKE 条件(%?).
例:
$construct .= "name LIKE %?%";
バインディング パラメーター:
データ型と入力値をパックします。 splat 演算子を使用して 1 つの配列に変換する(...).
例:
$parameters = ['sss', '%Bill%', '%N_d%', '%Dave%'];
ステートメントの準備と実行:
ステートメントの準備動的な WHERE 句を使用してバインドしますパラメータ。
$stmt = $mysqli->prepare('SELECT * FROM info WHERE ' . implode(' OR ', $conditions)); $stmt->bind_param(...$parameters); $stmt->execute();
結果の取得:
必要に応じてクエリを実行し、結果を取得します。
$result = $stmt->get_result(); foreach ($result as $row) { echo '<div>' . $row['name'] . '</div>\n'; }
例は修正されましたコード:
<?php $string = "my name"; $search_exploded = explode(" ", $string); $num = count($search_exploded); $conditions = []; $parameters = ['']; foreach (array_unique($search_exploded) 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'; } ?>
以上が準備されたステートメントを使用して MySQLi で動的 LIKE 条件 SELECT クエリを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。