在mysql where-in子句中对数组使用内爆

3mpgtkmj  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(274)

我正在尝试使用mysql where-in子句的数组

$result= $myDB->query("SELECT sum(total) as total FROM ".$myDB->prefix("mydata")." WHERE categoryname IN ('".$categoryname."') AND year='$year' AND stat_id='$stat_id'");

categoryname的当前输出为

('Cat1,Cat2,Cat3')

期望输出

('Cat1','Cat2','Cat3')

到目前为止我试过了,但不起作用

$categoryname_new = implode(',',$categoryname);

$result= $myDB->query("SELECT sum(total) as total FROM ".$myDB->prefix("mydata")." WHERE categoryname IN ('".$categoryname_new."') AND year='$year' AND stat_id='$stat_id'");
gopyfrb3

gopyfrb31#

最简单的解决方案是:

$array = ['Cat1', 'Cat2', 'Cat3'];
echo "'" . implode("','", $array) . "'";

但它可能会引入sql注入,所以您需要首先正确地转义数组中的数据
带转义的一行示例:

echo "'" . implode("','", array_map('mysql_escape_string', $array)) . "'";

注: mysql_* 函数已弃用,您需要使用 mysqli_* 哪些需要连接链接

qxgroojn

qxgroojn2#

不久前我用 array_map ,希望有帮助:

$args = array_map(function($a) {
    return sprintf("'%s'", $a);
}, $args);

$args = join(",", $args);

上面的代码将遍历数组,并修改每个元素以用 '' . 最后,我加入了数组 , .

相关问题