Php Mysql,其中id位于数组中

Php Mysql,其中id位于数组中,php,mysql,arrays,explode,Php,Mysql,Arrays,Explode,我有一个ID字符串,比如1,2,3,4,5,我希望能够列出mysql中包含ID的所有行 我认为最简单的方法是将字符串转换为数组,然后匹配($array),但这对我不起作用-没有错误等,但它不会返回任何行: $string="1,2,3,4,5"; $array=array_map('intval', explode(',', $string)); $query=mysqli_query($conn, "SELECT name FROM users WHERE id IN ('".$array."

我有一个ID字符串,比如1,2,3,4,5,我希望能够列出mysql中包含ID的所有行

我认为最简单的方法是将字符串转换为数组,然后匹配($array),但这对我不起作用-没有错误等,但它不会返回任何行:

$string="1,2,3,4,5";
$array=array_map('intval', explode(',', $string));
$query=mysqli_query($conn, "SELECT name FROM users WHERE id IN ('".$array."')");
如果我对$array进行var_转储,我会得到:

array(5) { 
    [0]=> int(1) 
    [1]=> int(2) 
    [2]=> int(3) 
    [3]=> int(4) 
    [4]=> int(5) 
}

你知道我把事情搞砸了吗?

你的问题是:

SELECT name FROM users WHERE id IN ('Array');
或者类似的东西

尝试使用准备好的查询,例如:

$numbers = explode(',', $string);
$prepare = array_map(function(){ return '?'; }, $numbers);
$statement = mysqli_prepare($link , "SELECT name FROM users WHERE id IN ('".implode(',', $prepare)."')");
if($statement) {
   $ints = array_map(function(){ return 'i'; }, $numbers);
   call_user_func_array("mysqli_stmt_bind_param", array_merge(
      array($statement, implode('', $ints)), $numbers
   ));
   $results = mysqli_stmt_execute($statement);
   // do something with results 
   // ...
}
$string=“1,2,3,4,5”;
$array=array_map('intval',explode(',',$string));
$array=内爆(“,”,$array);
$query=mysqli_query($conn,“从id位于(““$array.”)中的用户中选择名称);
注意:语法是:

从('value1'、'value2'、'value3')中列所在的表中选择*
更改

$array=array_map('intval', explode(',', $string));
致:


array\u map返回一个数组,而不是字符串。您需要将数组转换为逗号分隔的字符串,以便在WHERE子句中使用。

是Ids字符串还是整数?然后将其转换回原始字符串。。。重点是什么?我相信这正是他所要求的。这看起来和我选择的答案一样,只是一行而不是两行,所以我不知道为什么会投反对票?仅供参考@Darius我没有投反对票this@bhttoan这个答案与所做的相同:
$query=mysqli_query($conn,“从id位于(“$string.”)中的用户中选择名称”
它根本不会更改原始字符串。@qwertynl OP希望对数组中的每个值运行intval()函数,然后吐回一个逗号分隔的字符串。我完成了OP的要求,没什么,不管是否需要数组_map()。@bht它可能工作得很好,但它会受到漏洞的影响……怎么会这样?我展示了一个非常简化和精简的代码视图(包括实际的查询本身),以避免放置太多不必要的代码,但我很高兴数组内容得到了清理和处理safe@bhttoan您没有参数化任何内容。特别是当字符串来自客户端时,可能会出现问题。@qwertynl参数化是防止sql注入的可靠方法,但这并不意味着所有其他方法都是错误的。如果我期望值为“10”,并且我做了
$string==10
,这并不比参数化弱。您将如何参数化此语句?
$array= implode(',', array_map('intval', explode(',', $string)));