1

フィールド color_base1 と color_base2 が特定の色に似ているテーブルからアイテムを選択することになっているコードがあります。

ただし、現在、私のコードはテーブル内のすべてのフィールドを返すだけで、適用している LIKE を無視しています。

$result3 = $con -> prepare("SELECT  * FROM item_descr WHERE (color_base1 LIKE CONCAT ('%', ? , '%') OR color_base2 LIKE CONCAT ('%', ? , '%')) AND id_item != $itemId LIMIT 4");
$result3 -> execute(array("$color_base1", "$color_base2"));
$row3 = $result3->fetch();

SQL がどのように構築され、どのように構築する必要があるかについて、誰かが意見を持っていますか?

4

1 に答える 1

1

両方の変数に値が含まれているかどうかを再確認する必要があります。それ以外の場合、空の場合、クエリはすべての行を返します。

ただし、テーブル構造とデータを正規化し、LIKE を完全に取り除く方がよいでしょう。

また、アイテム ID もバインドする必要があることに注意してください。また
、PHP の変数は、引用符なしで指定する必要があります。また、一貫したネーミングも素晴らしいことです。結果に特徴的なものは何もありません。これは単なる PDO ステートメントであり、アプリケーションにとって特別な意味はありません。

$sql = "SELECT  * FROM item_descr WHERE 
(color_base1 LIKE CONCAT ('%', ? , '%') OR color_base2 LIKE CONCAT ('%', ? , '%')) 
AND id_item != ? LIMIT 4"
$stmt = $con->prepare($sql);
$stmt->execute(array($color_base1, $color_base2, $itemId));
$row = $stmt->fetch();
于 2013-06-18T16:19:27.573 に答える