我有和两个值的数组,我想在选择查询中使用它与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)
但它不会返回结果。
答案 0 :(得分:59)
因为你有简单的整数可以做...
$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/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)).")";
清理输入。 (输入周围没有引号。
答案 1 :(得分:14)
您需要将数组转换为逗号分隔的字符串:
$condition = implode(', ', $arr);
此外,您可能希望首先转义值(如果您不确定输入):
$condition = implode(', ', array_map('mysql_real_escape_string', $arr));
答案 2 :(得分:5)
$ arr是一个php数组,你需要发送一个将要解析的字符串到sql server 你需要把你的数组转换成1,2等的列表。
要执行此操作,您可以使用函数http://php.net/implode
所以在运行查询之前尝试
$arr = implode ( ', ', $arr);
答案 3 :(得分:5)
您需要使用',#39;内爆阵列。逗号
$imploded_arr = implode(',', $arr);
SELECT * from table Where comp_id IN ($imploded_arr)
答案 4 :(得分:4)
你只能将字符串作为查询传递给mysql,所以试试这个
mysql_query("SELECT * FROM table WHERE comp_id IN (".implode(',',$arr).")");
答案 5 :(得分:3)
您正在混合PHP和SQL - 对于IN
SQL运算符,您需要以下格式:
SELECT * from table WHERE comp_id IN (1,2)
因此,要在PHP中获取它,您需要执行以下操作:
$sql = "SELECT * from table Where comp_id IN (".implode(',',$arr).")"
请记住,这仅在数组包含整数时才有效。如果它们是字符串,则必须转义每个元素。
答案 6 :(得分:2)
您需要以下内容:
$sql = "SELECT * from table where comp_id in (".implode(',',$arr.")";
答案 7 :(得分:2)
您需要将$arr
实际转换为字符串。您正在做的最简单的方法是使用implode()
$query = 'SELECT * from table Where comp_id IN (' . implode(',', $arr) . ')';
现在,如果你echo
你的查询,你会看到而不是数组在IN
语句中,它只是单词“Array”
答案 8 :(得分:2)
您需要将数组转换为字符串以在查询中使用:
$list = implode(',', $arr);
然后它可以在IN子句中使用:
SELECT * from table Where comp_id IN ($list)
答案 9 :(得分:2)
这里的所有人都在提出相同的建议,但是由于一个简单的错误我在WordPress中收到了警告。 你需要在你的内爆字符串中添加逗号。确切地说是这样的。
$query = "SELECT *FROM table Where comp_id IN ( '" . implode( "', '", $sanitized_brands ) . "' )";
希望能帮助像我这样的人。 :)
答案 10 :(得分:2)
根据@barryhunter的答案,该答案仅适用于仅包含整数的数组:
$sql = "SELECT * from table Where comp_id IN (".implode(',',$arr).")";
我做了一些调整,使其可以用于字符串数组:
$sql = "SELECT * from table Where comp_id IN ('".implode("','",$arr)."')";
答案 11 :(得分:0)
在前面的一些回答中,存在SQL注入的风险。如果您完全确定@font-face {
font-family: 'Material Icons';
font-style: normal;
font-weight: 400;
src: local('Material Icons'),
local('MaterialIcons-Regular'),
url('~@fleet/ui/dist/fonts/MaterialDesignIcons/MaterialIcons-Regular.woff2') format('woff2'),
url('~@fleet/ui/dist/fonts/MaterialDesignIcons/MaterialIcons-Regular.woff') format('woff');
}
被消毒(并且将保持这种状态),那可能会很好。但是,如果您不确定,则可以使用$arr
来减轻这种风险。这是一种实现方法:
$stmt->bindValue
答案 12 :(得分:0)
如果您的数组是整数:
$searchStringVar = implode(",",$nameIntAryVar);
$query="SELECT * from table NameTbl WHERE idCol='$idVar' AND comp_id IN ($searchStringVar)";
如果您的数组是字符串:
$searchStringVar = implode("','",$nameStringAryVar);
$query="SELECT * from table NameTbl WHERE idCol='$idVar' AND comp_id IN ('$searchStringVar')";