一尘不染

如何在sql IN运算符中使用php数组?

php

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

这是我桌子的结构

id comp_id
1   2
2   3
3   1

$arr有两个值的数组Array ( [0] => 1 [1] => 2 )

我想获取comp_id 1和comp_id 2的记录。因此,我编写了以下查询。

SELECT * from table Where comp_id IN ($arr)

但是它不会返回结果。


阅读 506

收藏
2020-05-29

共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))."')";

但不能处理NULL之类的值。并会添加引号 盲目 周围的数值,这并 不会
如使用MySQL的严格模式下工作。https://dev.mysql.com/doc/refman/8.0/zh-CN/sql-
mode.html#idm1400823779170170 …仅在真正使用字符串(如VARCHAR)而非数字列的情况下才使用。

需要 调用类似的东西mysql_real_escape_string是这样,任何引号 中字符串 被妥善处理!(以及防止SQL注入!)


…如果希望使用“ 不受信任的 ”号码,可以使用intvalfloatval

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

清理输入。(输入中没有引号。

2020-05-29