给定一个ids数组$galleries = array(1,2,5),我想有一个SQL查询,在它的WHERE子句中使用数组的值,如:
SELECT *
FROM galleries
WHERE id = /* values of array $galleries... eg. (1 || 2 || 5) */
我如何生成这个查询字符串与MySQL使用?
给定一个ids数组$galleries = array(1,2,5),我想有一个SQL查询,在它的WHERE子句中使用数组的值,如:
SELECT *
FROM galleries
WHERE id = /* values of array $galleries... eg. (1 || 2 || 5) */
我如何生成这个查询字符串与MySQL使用?
当前回答
小心!此答案包含一个严重的SQL注入漏洞。不要使用这里给出的代码示例,除非确保任何外部输入都被清除。
$ids = join("','",$galleries);
$sql = "SELECT * FROM galleries WHERE id IN ('$ids')";
其他回答
无PDO的安全方法:
$ids = array_filter(array_unique(array_map('intval', (array)$ids)));
if ($ids) {
$query = 'SELECT * FROM `galleries` WHERE `id` IN ('.implode(',', $ids).');';
}
将$ids变量强制转换为数组 将所有数组值转换为整数 移除重复的值 删除零值 内爆连接所有值到IN选择
假设你事先正确地清理了你的输入……
$matches = implode(',', $galleries);
然后调整你的查询:
SELECT *
FROM galleries
WHERE id IN ( $matches )
根据数据集适当地引用值。
正如Flavius Stef的回答,你可以使用intval()来确保所有id都是int值:
$ids = join(',', array_map('intval', $galleries));
$sql = "SELECT * FROM galleries WHERE id IN ($ids)";
小心!此答案包含一个严重的SQL注入漏洞。不要使用这里给出的代码示例,除非确保任何外部输入都被清除。
$ids = join("','",$galleries);
$sql = "SELECT * FROM galleries WHERE id IN ('$ids')";
Use:
select id from galleries where id in (1, 2, 5);
一个简单的for每个循环将工作。
Flavius/AvatarKava的方法更好,但要确保数组值中没有逗号。