有个问题想请教大家...
按数组搜索我的表的最佳方法是什么,表中有一个数组。
例如:
$var = (1,4,7,9,14)
$Query = "SELECT * FROM business_listings WHERE category IN ($var)";
'category'
将有4,27,89,101
如果匹配中的一个数字与表中的一个数字匹配,我如何才能使其匹配$var
。
如果您的数据库列是逗号分隔值的列表,并且您正在该列表中搜索一个值,那么您处于不同的情况。
如果您的category
列包含 text value ,就像您在下面评论的那样,并且您正在搜索包含 contains410,406,149,152
的字段,那么您将需要使用 MySQL 的function。category
152
FIND_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 连接。
希望这可以帮助!