機器データベースの検索ページを作成しようとしていて、機器のタグ(常に必須)を使用して6つの異なるデータフィールド'タグ'はユーザー入力と一致します。PHPでLIKEとINを組み合わせるMySQLの準備文
キーワードがIN
のいずれかの長いフィールドの場合は結果が見つからないため、多くの意図した結果がありません。
通常のSQLでは、テーブル結合にして、IN
クエリにLIKE
クエリを追加します。 mysqliでは?
というプレースホルダを持つ準備済みの文を使用していますが、各変数に対してこのマークを複数回使用することについて何ができるか分かりません。
私が持っている文はこれです:
if (!($stmt = $conn->prepare("SELECT * FROM equipment
WHERE EQUIP_CND LIKE ?
AND (EQUIP_TYP LIKE ? OR ((EQUIP_SER LIKE ? OR EQUIP_PNO LIKE ?)
OR (EQUIP_LOC LIKE ? OR EQUIP_CMT LIKE ?)));"))) {
echo "Prepare failed: (" . $conn->errno . ") " . $conn->error;
}
そして私はちょうどLIKE IN
でLIKE
を交換したいです。これを達成する方法は?
これらのネストされたかっこはすべて必要ありません。ちょうど 'AND(x LIKE?OR LIKE?OR LIKE?...) ' – Barmar
「キーワードがこれらの長いフィールドのいずれかにある場合」とはどういう意味ですか?それらはコンマで区切られたリストですか? – Barmar
なぜあなたは準備された声明で 'JOIN'をすることができないと思いますか? – Barmar