如何使用php数组与SQL运算符?

时间:2012-03-08 13:19:07

标签: php sql arrays in-operator

我有和两个值的数组,我想在选择查询中使用它与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)

但它不会返回结果。

13 个答案:

答案 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注入!)


...如果您想使用“不受信任”号码,可以使用intvalfloatval

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