#php #mysql #sql #arrays
#php #mysql #sql #массивы
Вопрос:
Мне интересно, как запросить базу данных, используя массив, вот так:
$query = mysql_query("SELECT * FROM status_updates WHERE member_id = '$friends['member_id']'");
$friends
это массив, который содержит идентификатор участника. Я пытаюсь запросить базу данных и показать все результаты, где member_id
равно одному из идентификаторов элемента в $friends
массиве.
Есть ли способ сделать что-то вроде WHERE = $friends[member_id]
или мне пришлось бы преобразовать массив в строку и построить запрос следующим образом:
$query = "";
foreach($friends as $friend){
$query .= 'OR member_id = '.$friend[id.' ';
}
$query = mysql_query("SELECT * FROM status_updates WHERE member_id = '1' $query");
Буду признателен за любую помощь, спасибо!
Комментарии:
1. Быстрый совет: Если ваши
member_id
‘ы естьINT
в таблице, не заключайте их в кавычки.2. @webbiedave Да, вы действительно цитируете целые числа. MySQL не преобразует волшебным образом тип значения в строку при виде кавычек. Кавычки обозначают начало и конец значения. Отсутствие необходимости заключать целые числа в кавычки — это часто используемая функция для ленивых наборщиков.
3. @Mel: В этом вопросе вы определенно в меньшинстве.
Ответ №1:
Вы хотите IN
.
SELECT * FROM status_updates WHERE member_id IN ('1', '2', '3');
Итак, код изменяется на:
$query = mysql_query("SELECT * FROM status_updates WHERE member_id IN ('" . implode("','", $friends) . "')");
В зависимости от того, откуда у вас берутся данные в массиве friends, многие хотят передавать каждое значение через mysql_real_escape_string()
, чтобы убедиться, что нет SQL-инъекций.
Ответ №2:
Используйте оператор SQL IN следующим образом:
// Prepare comma separated list of ids (you could use implode for a simpler array)
$instr = '';
foreach($friends as $friend){
$instr .= $friend['member_id'].',';
}
$instr = rtrim($instr, ','); // remove trailing comma
// Use the comma separated list in the query using the IN () operator
$query = mysql_query("SELECT * FROM status_updates WHERE member_id IN ($instr)");
Ответ №3:
$query = "SELECT * FROM status_updates WHERE ";
for($i = 0 ; $i < sizeof($friends); $i ){
$query .= "member_id = '".$friends[$i]."' OR ";
}
substr($query, -3);
$result = mysql_query($query);
Комментарии:
1. implode было бы более подходящим для этого действия, которое с самого начала вызывает подозрения — IN было бы лучше.