如何将php数组与sql IN运算符一起使用?

2022-08-30 11:06:27

我有两个值的数组,我想在选择查询中将其与sql IN运算符一起使用。

这是我的表的结构

id comp_id
1   2
2   3
3   1

我有一个有两个值的数组$arrArray ( [0] => 1 [1] => 2 )

我想获取comp_id 1 和 comp_id 2 的记录。所以我写了以下查询。

SELECT * from table Where comp_id IN ($arr)

但它不返回结果。


答案 1

由于您有纯整数,因此只需用逗号连接它们:

$sql = "SELECT * FROM table WHERE comp_id IN (" . implode(',', $arr) . ")";

如果使用字符串,尤其是不受信任的输入:

$sql = "SELECT * FROM table WHERE comp_id IN ('" 
     . implode("','", array_map('mysql_real_escape_string', $arr)) 
     . "')";

请注意,这不能处理诸如(将保存为空字符串)之类的值,并且会在数值周围盲目地添加引号,如果使用严格的mysql模式,则不起作用。NULL

mysql_real_escape_string是原始 mysql 驱动程序扩展中的函数,如果使用较新的驱动程序(如 mysqli),请改用。mysqli_real_escape_string

但是,如果您只想使用不受信任的号码,则可以使用或清理输入:intvalfloatval

$sql = "SELECT * FROM table WHERE comp_id IN (" . implode(",", array_map('intval', $arr)) . ")";

答案 2

您需要将数组转换为逗号分隔的字符串:

$condition = implode(', ', $arr);

此外,您可能希望首先对值进行转义(如果您不确定输入):

$condition = implode(', ', array_map('mysql_real_escape_string', $arr));