Я уверен, что этот вопрос является дубликатом, но я не могу найти точный источник.
Ваш текущий метод означает, что вам нужно выполнить целый запрос MySQL для каждой итерации .
Поскольку результаты запроса никогда не изменят содержимого итерации, следовательно;вы можете просто переработать его, используя MySQL IN
для загрузки всех ваших переменных одновременно:
Шаг 1) Возьмите все значения и поместите их водин массив.
$new = []; //new array
foreach ($_POST as $key=>$id){
// Check it is a numeric key
// Check id value is valid to avoid importing other POST values
if((int)$key == $key && (int)$id == $id){
$new[] = $id;
}
}
Приведенный выше кодовый блок необязателен для прекращения использования значений из $_POST['button']
или других опубликованных данных, которые не должны включаться.Этот шаг можно удалить, если вы можете уточнить свои опубликованные данные, например сохранить все id
s в самом массиве $_POST['id']
.
Шаг 2) Очистить массив нулевых / недействительных или повторяющихся значений.
$new = array_unique($new);
Шаг 3) Превратить массив в строкувнутри SQL
$arrayString = implode(',',$new);
Шаг 4) Вставьте строку в предложение SQL IN:
$sql = "SELECT * FROM firstname WHERE id IN (" . $arrayString . ") ORDER BY id";
Упрощено и сокращено:
$new = []; //new array
foreach ($_POST as $key=>$id){
if((int)$key == $key && (int)$id == $id){
$new[] = $id;
}
}
$new = array_unique($new);
$sql = "SELECT * FROM firstname WHERE id IN (" .
implode(',',$new) . ") ORDER BY id";
Приведенный выше SQL-запрос даст вам массив массивов, каждый из которых будет отдельной строкой.Вы можете заказать их, отсортировать и вывести на PHP по своему усмотрению.
См. Также: This Q & A .
НО
Как выразились другие, вы действительно ДЕЙСТВИТЕЛЬНО должны использовать Подготовленные заявления с MySQLi .
См. Также здесь , здесь и здесь , чтобы увидеть дальше как как это сделать и ПОЧЕМУ выдолжен сделать это .
Основные советы:
- Числовые столбцы (типичные для
id
столбцов) в MySQL не нуждаются в кавычках '
. - Пока вы не используете подготовленные операторы, вы можете typecast переменные в целые числа (
(int)$var
), чтобы ограничить риск. - Лучше указать нужные столбцывместо использования
*
всеобъемлющего. - Ваши
$_POST
данные должны быть массивом $_POST['ids'][...]
. - Ешьте пять разных кусочков фруктов или овощей в день.
Никогда не доверяйте пользовательскому вводу!