Обновить базу данных двумя параметрами массива - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь обновить свою базу данных информацией, которая отправляется через форму. Моя проблема в том, что я не понимаю, как я могу зациклить оба массива одновременно. Я попытался вложить циклы foreach безуспешно.

У меня тогда есть это для работы с

$display = $_POST["show"] ?? "";
$id = array_keys($_POST["show"]);

if ($action == "submit") {
foreach ($display as $key => $value) {
        $stmt = $db->prepare("UPDATE picture SET display = ? WHERE id = ?");
        $stmt->bindParam($display, $id)
        $stmt->execute();
}
 }

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Если я правильно увидел, это то, что вы хотите:

<?php

    try {
        $display = isset($_POST['show']) ? $_POST['show'] : [];
        if ($action === 'submit' && !empty($display)) {
            $db->beginTransaction();
            $stmt = $db->prepare('
                UPDATE picture
                SET display = :display
                WHERE id = :id;
            ');
            foreach ($display as $id => $show) {
                $stmt->bindParam(':display', $show);
                $stmt->bindParam(':id', $id, PDO::PARAM_INT);
                $stmt->execute();
            }
            $db->commit();
        }
    } catch(PDOException $e) {
       echo $e->getMessage();
       $db->rollBack();
    }
0 голосов
/ 29 октября 2018

Вы можете перебирать массив и получать ключи и значения одновременно:

$display = $_POST["show"] ?? [];

// Also you can check if `$display` is not empty
if ($action == "submit" && $display) {
    // prepare statement ONCE
    $stmt = $db->prepare("UPDATE picture SET display = ? WHERE id = ?");
    foreach ($display as $key => $value) {
        // execute statement as many times as you want with your params
        $stmt->execute([$value, $key]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...