我有一串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_dump,我得到:
array(5) {
[0]=> int(1)
[1]=> int(2)
[2]=> int(3)
[3]=> int(4)
[4]=> int(5)
}
知道我搞砸了吗?
答案 0 :(得分:35)
$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."')");
答案 1 :(得分:6)
您的查询转换为:
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
// ...
}
答案 2 :(得分:2)
更改
$array=array_map('intval', explode(',', $string));
要:
$array= implode(',', array_map('intval', explode(',', $string)));
array_map返回一个数组,而不是一个字符串。您需要将数组转换为逗号分隔的字符串,以便在WHERE子句中使用。