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 回答