В настоящее время у меня есть массив значений (business_id)
скажем, его
Array ( [0] => 12 [1] => 14 [2] => 15 )
Каков наилучший способ использовать каждое из этих значений для получения связанной информации о строках для каждого бизнес-файла из базы данных.
Может ли это быть одним в одном вопросе, это мой вопрос. Очевидно, вы могли бы сделать
$q = "select * from business where business_id = 12"; $rs = mysql_query($q);
$ids = array(1, 2, 3, 4); $ids = join(', ', $ids); $query = "SELECT * FROM business WHERE business_id IN ($ids)"; // $query => SELECT * FROM business WHERE business_id IN (1, 2, 3, 4)
Обычные предупреждения SQL-инъекций по-прежнему применяются, вы можете сначала пройти через идентификаторы, чтобы проверить или избежать их. Кроме того, если вы ожидаете строки вместо чисел, используйте это:
$ids = array('a', 'b', 'c', 'd'); $ids = join("', '", $ids); $query = "SELECT * FROM business WHERE business_id IN ('$ids')"; // $query => SELECT * FROM business WHERE business_id IN ('a', 'b', 'c', 'd')
Используйте операцию SQL IN:
$sql = 'SELECT * FROM business WHERE business_id IN (' . implode(',', $values) . ')'; $rs = mysql_query($sql);
Примечание. Если значения поступают от клиента, их следует дезинфицировать либо с помощью mysql_real_escape_string()
либо потому, что это числа, вы можете использовать intval()
. Например:
$ids = array_map('intval', $values); $sql = 'SELECT * FROM business WHERE business_id IN (' . implode(',', $ids) . ')'; $rs = mysql_query($sql);
Вы можете присоединиться к массиву с помощью запятой в качестве разделителя и использовать инструкцию SQL IN.
$businessIds = join(",", $array); $q = "select * from business where business_id IN ($businessIds)"; $rs = mysql_query($q);