За последние 24 часа нас посетили 21462 программиста и 1015 роботов. Сейчас ищут 727 программистов ...

Параметризация запроса

Тема в разделе "PHP и базы данных", создана пользователем S_Helen1998, 16 май 2020.

  1. S_Helen1998

    S_Helen1998 Новичок

    С нами с:
    16 май 2020
    Сообщения:
    1
    Симпатии:
    0
    $query = !empty($_GET['box']) ?
    "SELECT*FROM products WHERE categoryID IN (" . implode(',', $_GET['box']) . ")"
    :
    "SELECT*FROM products";

    $result = $pdo->query($query);
    $products = $result->fetchAll();

    Всем привет! Есть три чекбокса, name которых передается в $_GET['box']. Хотела сделать параметризацию categoryID (categoryID=:categoryID) и передать методу execute() индексы для дальнейшего вывода запрашиваемых данных экран. У меня получилось это сделать в нижеприведенном скрипте, но с огромными костылями.

    $arr = [];
    $arr_products = [];
    $products = [];

    if(!empty($_GET['box'])) {
    $arr = $_GET['box'];
    }
    else {
    $products = [];
    $result = $pdo->query("SELECT * FROM products");
    $products = $result->fetchAll();
    }

    foreach ($arr as $key) {
    $query= "SELECT * FROM products WHERE categoryID =:categoryID";
    $result = $pdo->prepare($query);
    $result -> execute(['categoryID' => $key]);
    $arr_products = $products;
    $products = array_merge($arr_products, $result->fetchAll());
    }
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.752
    Симпатии:
    1.322
    Адрес:
    Лень
    Умница. Не интересно мне ваши косяки.
     
  3. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    окей гугл
    PHP:
    1. <?php
    2. $ids = [1,2,3,4,5]; // any array of ids
    3. $count = count($id);
    4. $placeholders = implode(',', array_fill(0, $count, '?'));
    5. $bindStr = str_repeat('i', $count);
    6.  
    7. $stmt = $mysqli -> prepare("SELECT * FROM table WHERE id IN ($placeholders)");
    8. $stmt -> bind_param($bindStr, ...$ids);
    9. $stmt -> execute();
     
    S_Helen1998 нравится это.