使用 PDO:[1]
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
$statement = $pdo->prepare($select);
$statement->execute($ids);
使用 MySQLi [2]
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
$statement = $mysqli->prepare($select);
$statement->bind_param(str_repeat('i', count($ids)), ...$ids);
$statement->execute();
$result = $statement->get_result();
解释:
使用 SQL IN() 运算符检查给定列表中是否存在值。
一般来说是这样的:
expr IN (value,...)
我们可以构建一个表达式以放置在我们数组中的() 中。注意括号内必须至少有一个值,否则 MySQL 将返回错误;这等同于确保我们的输入数组至少有一个值。为了帮助防止 SQL 注入攻击,首先为每个输入项生成一个 ? 以创建参数化查询。在这里,我假设包含您的 id 的数组称为$ids:
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
给定一个包含三个项目的输入数组 $select 将如下所示:
SELECT *
FROM galleries
WHERE id IN (?, ?, ?)
再次注意,输入数组中的每个项目都有一个?。然后我们将使用 PDO 或 MySQLi 来准备和执行上述查询。
将IN() 运算符与字符串一起使用
由于绑定的参数,字符串和整数之间的转换很容易。对于 PDO,无需更改;对于 MySQLi,如果您需要检查字符串,请将 str_repeat('i', 更改为 str_repeat('s',。
[1]: 为简洁起见,我省略了一些错误检查。您需要检查每个数据库方法的常见错误(或将您的数据库驱动程序设置为抛出异常)。
[2]: 需要 PHP 5.6 或更高版本。为简洁起见,我再次省略了一些错误检查。