Как получить данные, используя цикл PHP оператор из MySQL в IOS? - PullRequest
0 голосов
/ 26 января 2019

Моя система состоит из 3 компонентов.

ios - php - mysql

Если пользователи ios выбирают несколько идентификаторов,
затем приложение ios отправляет на сервер эти выбранные запросы id,
и сервер находит данные на основе выбранных идентификаторов в MySQL.
и, наконец, сервер передает эти данные в приложение ios.

Это те операторы PHP, которые я пробовал.

<?php


    $id_0 = $_POST['0'];
    $id_1 = $_POST['1'];
    $id_2 = $_POST['2'];
    $id_3 = $_POST['3'];
    ...
    $id_n = $_POST['n'];

    $conn = mysqli_connect('address', 'user', 'password', 'database');
    $sql = "SELECT * FROM firstname WHERE id = '$id_0'";

    if ($result = mysqli_query($conn, $sql)) {

    $resultArray = array();
    $tempArray = array();

    while($row = $result->fetch_object()) {
       $tempArray = $row;
       array_push($resultArray, $tempArray);
     }

     } else {

     }

     mysqli_close($conn);


?>

Чтобы получить несколько данных 'id', я обнаружил, что мне нужно использовать оператор цикла.

Но проблема в том, что количество выбранных идентификаторов являются переменными.

Я думаю, что в этом коде мне нужно два оператора цикла.

  1. Чтобы получить несколько данных на основе нескольких идентификаторов (количество идентификаторов являются переменными)
  2. Чтобы добавить эти данные в массив

Я не знаю, как использовать оператор цикла, когда диапазон не определен.

Как я могу использовать оператор цикла в PHP и как я могу переставить эти коды?

1 Ответ

0 голосов
/ 26 января 2019

Я уверен, что этот вопрос является дубликатом, но я не могу найти точный источник.

Ваш текущий метод означает, что вам нужно выполнить целый запрос 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'][...].
  • Ешьте пять разных кусочков фруктов или овощей в день.
  • Никогда не доверяйте пользовательскому вводу!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...