Php Mysql,其中id位于数组中
我有一个ID字符串,比如1,2,3,4,5,我希望能够列出mysql中包含ID的所有行 我认为最简单的方法是将字符串转换为数组,然后匹配($array),但这对我不起作用-没有错误等,但它不会返回任何行: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."
$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)));