Используйте цикл на SQL "ОБНОВЛЕНИЕ" для установки значения - PullRequest
0 голосов
/ 13 апреля 2019

Итак, я изучаю, как обновить базу данных с помощью цикла.У меня есть таблица с именами полей, таких как "id", "nh1", "nh2", "nh3".

Вот пример полей ввода:

<?php
echo "<form action='' method='post'>";
for ($i = 1; $i <= 3; $i++) {
    echo "<input type='text' name='input$i'>";
}
echo "<input type='submit' value='Submit'>";
echo "</form>";

Что яя хочу обновить базу данных с помощью цикла, например:

<?php

for ($i = 1; $i <= 3; $i++) {
    ${'NH'.$i} = $_POST['input'.$i];
}
for ($i = 1; $i <= 3; $i++) {
    $q = mysqli_query("update myTable set nh$i=${'NH'.$i} where id=1");
}

Возможно ли это?Или есть какой-то другой способ правильно его использовать?

Надеюсь, я прояснил свой вопрос.

1 Ответ

1 голос
/ 13 апреля 2019

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

// Values used to bind to prepare
$binds = [];
// The types of the binds
$types = "";
// The SQL statement
$update = "update myTable set ";
for($i=1; $i<=3; $i++){
    // If this input is set
    if ( isset($_POST['input'.$i])) {
        // Store it in the array
        $binds[] = $_POST['input'.$i];
        // Add in part of SQL - e.g. nh1 = ?,
        $update .= "nh$i = ?,";
        // Add type of parameter (string)
        $types .= "s";
    }
}
// Add where clause (remove trialing comma from list of fields to update
$update = substr ($update, 0, -1)." where id=1";
$stmt = $mysqli->prepare($update);
// Bind the variables
$stmt->bind_param($types, ...$binds );
$stmt->execute();

Утверждение, которое он строит, будет выглядеть примерно так ...

update myTable set nh1 = ?,nh3 = ? where id=1

с данными для привязки, показанными ниже,поэтому каждый из этих элементов будет помещен вместо соответствующего заполнителя (?) в SQL.

Array
(
    [0] => value for input 1
    [1] => value for input 3
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...