Mysql,其中 id 在数组中

2022-08-30 12:36:20

我有一个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."')");

如果我做一var_dump$array,我会得到:

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

任何想法我在哪里搞砸了?


答案 1
$string="1,2,3,4,5";
$array=array_map('intval', explode(',', $string));
$array = implode("','",$array);
$query=mysqli_query($conn, "SELECT name FROM users WHERE id IN ('".$array."')");

注意:语法是:

SELECT * FROM table WHERE column IN('value1','value2','value3')


答案 2

您的查询将转换为:

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 
   // ...
}