Множественная запись в MySQL

191
30 декабря 2019, 16:00

есть таблица в которой редактируются данные и кнопка, по которой это всё сохраняется. Запрос изначально выглядел таким образом:

 $SQL = "UPDATE Users SET phone='$phone', name='$name', surname='$surname', second_name='$second_name', manager_comment='$manager_comment', delivery_adress='$delivery_adress', delivery_time='$delivery_time', delivery_date='$delivery_date', courier='$courier' WHERE id='$form_id'";
    $result = mysqli_query($link, $SQL);

Но он записывает только 1 строку. Как перестроить запрос таким образом, чтобы он делал множественную запись по каждому id?

Answer 1

Как правильно отметил DaemonHK, нет никакой проблемы запустить запрос в цикле.

Это будет простым и понятным вариантом, для его реализации не нужно "разобираться, как передать данные в виде такой таблицы". В программировании всегда следует избегать ненужного переусложнения кода на пустом месте.

А вот для подготовленных выражений, про которые тебе говорят уже в который раз, несколько запросов в цикле - это как раз очень хороший случай, чтобы их применить.

Тем более что любой хитровыдуманный способ имеет свои недостатки. В частности, способ, предложенный Sergey Nudnov, выполняет запросы insert. А это значит, что если искомая строка не будет найдена в таблице, то этот запрос добавит её. Чего в принципе быть не должно.

На самом деле, конечно, существует способ корректно сделать все апдейты одним запросом без нежелательных вставок. Запрос для этого будет и вовсе зубодробительный. И, как я уже говорил, никакой прямо-таки страшной необходимости выполнять все обновления обязательно одним запросом. Десяток запросов в цикле, особенно с использованием подготовленных выраженийЙ, особенно завернутых в транзакцию ещё никому систему не обрушил.

Answer 2

Подготовьте данные в виде таблицы и используйте INSERT INTO:

INSERT INTO Users (id, phone, name, surname, second_name, manager_comment, delivery_adress, delivery_time, delivery_date, courier)
VALUES
('1', '416-000-0000', 'Vasily', 'Pupkin', 'Michael', 'No comments', '123 Street', '10:00', '1 apr', 'Быстрый'),
('5', '416-000-0005', 'Сергей', 'Нуднов', 'Михайлович', 'No comments', '777 Avenue', '18:00', '1 apr', 'Супер Быстрый'),
('2', '416-000-0001', 'Ivan', 'Ivanov', 'Ivanovich', 'No comments', '345 Street', '11:00', '1 apr', 'Быстрый')
ON DUPLICATE KEY UPDATE
    phone=VALUES(phone),
    name=VALUES(name),
    surname=VALUES(surname),
    second_name=VALUES(second_name),
    manager_comment=VALUES(manager_comment),
    delivery_adress=VALUES(delivery_adress),
    delivery_time=VALUES(delivery_time),
    delivery_date=VALUES(delivery_date),
    courier=VALUES(courier)

Подразумевается, что id это Primary key! Иначе не сработает.

READ ALSO
не срабатывает условие if

не срабатывает условие if

Вывожу древообразное меню из mysqlПо клику на категорию, выезжают подкатегории (если такие есть)

152
не работает запуск php в консоли

не работает запуск php в консоли

эта команда не работает, никаких ошибок нету

160
php mvc модель и связь один ко многим

php mvc модель и связь один ко многим

Интересует такой вопрос, например, есть две таблицы в базе данных

135
WP_Query, сортировка по произвольным полям

WP_Query, сортировка по произвольным полям

Допустим есть произвольный тип, созданный с помощью register_post_type('custom_type'

177