вставить несколько значений в несколько строк с подготовленным оператором PHP, MYSQL - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь вставить данные из множества элементов в базу данных с несколькими строками.

Однажды мне удалось вставить их все в ОДНУ строку, каждая с запятой, что не очень хорошо с точки зрения базы данных. Данные из множественного выбора хранятся в виде массива в переменной, которая затем должна быть заполнена в несколько строк в базе данных с помощью цикла foreach.

$array = implode((array)$_POST['multiselectdata']);

$sql = "INSERT INTO tbl_example (column1, column2) VALUES (?, ?)";

$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)){
    ....
    exit();
}
else {
    mysqli_stmt_bind_param($stmt, "ii", $array, $id);
    mysqli_stmt_execute($stmt);
    $result= mysqli_stmt_store_result($stmt);
    mysqli_fetch_all($result,MYSQLI_ASSOC);
    foreach($result as $row){
        echo $row["column1"];
    }
    exit()
}

В результате в каждой строке должно быть отображено 1 значение массива в column1, а в column2 всегда будет один и тот же идентификатор. В настоящее время это только вставляет 1 значение в базу данных и только 1 строку

1 Ответ

2 голосов
/ 07 мая 2019

Вместо того, чтобы взорвать содержимое $_POST['multiselectdata'], вы можете перебрать его как массив и выполнить подготовленный оператор для каждого значения в массиве:

$stmt = mysqli_stmt_init($conn);
if(!mysqli_stmt_prepare($stmt, $sql)){
    // ....
    exit();
}
else {
    mysqli_stmt_bind_param($stmt, "ii", $value, $id);
    foreach (explode(',', $_POST['multiselectdata']) as $value) {
        mysqli_stmt_execute($stmt);
    }
}

Обратите внимание, что вызов mysqli_stmt_store_result для запроса INSERT не имеет смысла, так как нет набора результатов. Эта строка и следующий цикл foreach должны быть удалены из вашего кода.

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