我有一个代码应该从表格中选择项目,其中字段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的构建方式以及如何构建SQL有任何意见?
答案 0 :(得分: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();