如何使用for循环,在php的mysqli\u查询中使用in操作符

z4iuyo4d  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(426)

我想创建mysqli\u查询wish将返回一个基于id列表的数据库元组。
在sql中,查询将如下所示:

SELECT * FROM `tale_name` WHERE `id` in(1,2,3,4);

假设id放在一个名为$id\u array的php数组中,那么如何在php代码中编写相同的查询呢?
首先,我尝试了以下代码(但我知道这不是真的):

mysqli_query($this->conn, "SELECT * FROM `tale_name` WHERE
 `id` in (".for ($i = 0; $i < count($id_array); $i++){ echo $id_array[$i]}.")");

似乎for循环不能与php中的mysqli\u查询结合使用。。。有什么建议吗?

o2rvlv0m

o2rvlv0m1#

你可以用 implode() .
用法: string implode ( string $glue , array $pieces ) ```
mysqli_query($this->conn, "SELECT * FROM tale_name WHERE id in (". implode(',', $id_array) .")");

sg24os4d

sg24os4d2#

这个 echo 函数用于输出。您需要构建一个变量,然后将其连接到字符串。你应该把它扔给一个 int 但至少要防止sql注入,最好的做法是参数化查询。

$ids ='';
for ($i = 0; $i < count($id_array); $i++){ 
        $ids .= ((int)$id_array[$i]) . ', ';
}
$ids = rtrim($ids, ', ');
echo "SELECT * FROM `tale_name` WHERE `id` in ({$ids})";

参数化版本:

$placeholders = str_repeat('?, ', count($id_array));
$placeholders = rtrim($placeholders, ', ');
echo "SELECT * FROM `tale_name` WHERE `id` in ({$placeholders})";

然后使用 prepare , bind_param ,和 execute 在那个问题上。

相关问题