Проблема с массивом PHP и MySQL

#php #mysql

#php #mysql

Вопрос:

Я пытаюсь получить название категорий из каждого значения массива из базы данных, а затем добавить название категорий в массив $cat_name , как я могу это сделать, используя PHP и MySQL?

 $array = array(1, 2, 3, 4, 5);

$cat_name = array();
$dbc = mysqli_query($mysqli,"SELECT category 
                 FROM categories 
                 WHERE id = '" . $array . "'"); 


if (!$dbc) {
    print mysqli_error($mysqli);
} else {
    while($row = mysqli_fetch_array($dbc)){
    $cat_name[] = $row['category'];
    }
}
  

Ответ №1:

сделайте это следующим образом:

 $dbc = mysqli_query($mysqli,"SELECT category 
                 FROM categories 
                 WHERE id IN (" .implode(",", $array). ")"); 
  

Комментарии:

1. что, если мой массив выглядит следующим образом Array ( [0] => 1 [1] => 34 )

2. какой тип идентификатора означает interger, alphanum и т.д. Если он числовой, то этот массив не может быть применен … и массив должен быть одномерным, иначе вам придется использовать запрос SELECT более одного…

3. хорошо… если вам нужно: $ array2=new array(); foreach($array как $k=>$ v){ $array2[] = $v; } $ dbc = mysqli_query($mysqli,»ВЫБЕРИТЕ категорию ИЗ категорий, где идентификатор В (» .implode(«,», $array2). «)»);

Ответ №2:

 $dbc = mysqli_query($mysqli,"SELECT category 
    FROM categories
    WHERE id IN (" . implode(",", $array) . ")");
  

Однако при выполнении этого убедитесь, что ваш массив действительно содержит только целые числа, иначе у вас будет неприятная дыра в SQL-инъекции. Если ваш массив может содержать что-то еще, выполните цикл по нему, экранируя все значения и заключая их в кавычки, прежде чем делать это.

Комментарии:

1. что, если мой массив выглядит следующим образом Array ( [0] => 1 [1] => 34 )

2. @оставлено: … это массив целых чисел. Просто убедитесь, что это всегда так.

Ответ №3:

Код выглядит хорошо. Прав ли я, предполагая, что вы каждый раз получаете сообщение об ошибке? Я не думаю, что ваш синтаксис SQL правильный. Я использую ‘WHERE id IN(‘.implode($array,’,’).’)’. Не уверен, что это ваш вопрос…

РЕДАКТИРОВАТЬ: У меня есть небольшое подозрение, что вы также могли бы отказаться от своего цикла и вместо этого просто выполнить вторую выборку для столбца ‘categories’.

Комментарии:

1. что, если мой массив выглядит следующим образом Array ( [0] => 1 [1] => 34 )

2. Я думаю, вы могли бы использовать implode(array_values($array),’,’).