Ahm*_*mad 33 php sql arrays in-operator
我有和两个值的数组,我想在选择查询中使用它与sql IN运算符.
这是我桌子的结构
id comp_id
1 2
2 3
3 1
Run Code Online (Sandbox Code Playgroud)
我有一个$arr有两个值的数组Array ( [0] => 1 [1] => 2 )
我想获取comp_id 1和comp_id 2的记录.所以我编写了以下查询.
SELECT * from table Where comp_id IN ($arr)
Run Code Online (Sandbox Code Playgroud)
但它不会返回结果.
bar*_*ter 68
因为你有简单的整数可以做...
$sql = "SELECT * FROM table WHERE comp_id IN (".implode(',',$arr).")";
Run Code Online (Sandbox Code Playgroud)
(因为它不断出现,一些额外的信息...)
如果使用字符串(特别是不可信)输入,可以做
$sql = "SELECT * FROM table WHERE comp_id IN
('".implode("','",array_map('mysql_real_escape_string', $arr))."')";
Run Code Online (Sandbox Code Playgroud)
但不处理像NULL这样的值.并会添加引号盲目周围的数值,这并不会如使用MySQL的严格模式下工作.https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#idm140082377917056 ...即只使用它,如果真的使用字符串(如VARCHAR),而不是数字列.
在需要调用类似的东西mysql_real_escape_string是使任何报价在字符串中妥善处理!(以及防止SQL注入!)
...如果你想使用' 不受信任的 '号码,可以使用intval或floatval
$sql = "SELECT * FROM table WHERE comp_id IN (".implode(",",array_map('intval', $arr)).")";
Run Code Online (Sandbox Code Playgroud)
消毒输入.(输入周围没有引号.
Aur*_*mas 14
您需要将数组转换为逗号分隔的字符串:
$condition = implode(', ', $arr);
Run Code Online (Sandbox Code Playgroud)
此外,您可能希望首先转义值(如果您不确定输入):
$condition = implode(', ', array_map('mysql_real_escape_string', $arr));
Run Code Online (Sandbox Code Playgroud)
$ arr是一个php数组,对于sql server你需要发送一个字符串来解析你需要把你的数组转换成1,2等等的列表.
为此,您可以使用http://php.net/implode函数
所以在运行查询之前试试
$arr = implode ( ', ', $arr);
Run Code Online (Sandbox Code Playgroud)
您需要使用','逗号将数组内插
$imploded_arr = implode(',', $arr);
SELECT * from table Where comp_id IN ($imploded_arr)
Run Code Online (Sandbox Code Playgroud)