PDO查询使用LIKE CONCAT返回比预期更多的值

时间:2013-06-18 15:04:11

标签: php sql pdo concat sql-like

我有一个代码应该从表格中选择项目,其中字段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有任何意见?

1 个答案:

答案 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();