我有多个ID存储在变量中。此数组可能变长(+400 ID)。如何从MySQL(PDO)中的这些ID中获取数据?
我可以通过这个来做到这一点:
"select * from info WHERE `id` IN ('1,2,3,4,5')"
但这是不安全的(SQL注入),也许不是高性能。有任何建议可以解决这个问题吗?
答案 0 :(得分:4)
$in = join(',', array_fill(0, count($ids), '?'));
$select = <<<SQL
SELECT *
FROM galleries
WHERE id IN ($in);
SQL;
$statement = $pdo->prepare($select);
$statement->execute($ids);
答案 1 :(得分:1)
从内容'1,2,3,4,5'
中取出单引号,检查ID下的完整值。
所以在没有单引号的情况下使用它,因为ID列是数字,1,2,3,4,5
这将分隔每个值。
答案 2 :(得分:1)
我认为id字段是INTEGER所以请删除撇号,新查询就像,
select * from info WHERE `id` IN (1,2,3,4,5)
另一方面,在PHP方面,
$idList = explode(',', $_GET['id_list']);
$idList = implode(',', array_unique(array_map('intval', $idList)));
$query = "select * from info WHERE `id` IN ($idList)";
请在IN
http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_max_allowed_packet
答案 3 :(得分:0)
使用
"select * from info WHERE `id` IN (1,2,3,4,5)"
包含单引号会强制整个值被视为单个字符串。
如果你在数组中有值,那就把它写成
$query = "select * from info WHERE `id` IN (implode(',', array_map('intval', json_decode('[' . $ids . ']', true))))" ;