0

有个问题想请教大家...

按数组搜索我的表的最佳方法是什么,表中有一个数组。

例如:

$var = (1,4,7,9,14)

$Query = "SELECT * FROM business_listings WHERE category IN ($var)";

'category'将有4,27,89,101

如果匹配中的一个数字与表中的一个数字匹配,我如何才能使其匹配$var

4

1 回答 1

0

如果您的数据库列是逗号分隔值的列表,并且您正在该列表中搜索一个值,那么您处于不同的情况。

如果您的category列包含 text value ,就像您在下面评论的那样,并且您正在搜索包含 contains410,406,149,152的字段,那么您将需要使用 MySQL 的functioncategory152FIND_IN_SET()

如果您必须检查多个值,那么您需要使用多个FIND_IN_SET. 如果您阅读文档,您会看到 for 的第一个参数FIND_IN_SET必须是单个字符串,而不是字符串列表(它不能包含逗号)。请改用以下内容:

$var = "401,320,152";
$items = explode(",", $var);
foreach ($items as &$i) {
    $i = "FIND_IN_SET('" . $i . "', `category`)";
}
$search = implode(" OR ", $items);
unset($i);
$query = "SELECT * FROM business_listings WHERE " . $items;

这将输出:

SELECT * FROM business_listings WHERE
    FIND_IN_SET('401', `category`) OR
    FIND_IN_SET('320', `category`) OR
    FIND_IN_SET('152', `category`)

即使$var只包含一个值,上面的脚本也可以工作。

最后,正如tadman 所提到的,由于我们正在处理使用准备好的语句构建起来可能很棘手的查询,因此您需要确保正确地转义和清理输入。例如,如果$var以某种方式从用户那里检索,那么在以任何方式修改它之前,您需要使用以下命令对其进行转义mysqli_real_escape_string()

$var = $mysqli->real_escape_string($var);

假设这$mysqli是您打开的 MySQLi 连接。

希望这可以帮助!

于 2013-09-25T16:37:30.497 回答