0

我想创建 mysqli_query 希望将返回一个基于 id 列表的数据库元组。

SQL中,查询将如下所示:

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

假设 id 被放入一个名为$id_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_query 结合使用......有什么建议吗?

4

2 回答 2

1

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})";

然后在该查询上使用preparebind_param和。execute

于 2018-08-22T19:49:01.500 回答
0

您可以使用implode().

用法:string implode ( string $glue , array $pieces )

mysqli_query($this->conn, "SELECT * FROM `tale_name` WHERE `id` in (". implode(',', $id_array) .")");
于 2018-08-22T19:41:37.747 回答