Как запросить базу данных с помощью массива? ГДЕ = ‘array()’

#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 было бы лучше.