За последние 24 часа нас посетил 22921 программист и 1241 робот. Сейчас ищут 783 программиста ...

Запись массива в БД

Тема в разделе "PHP для новичков", создана пользователем Reken, 4 ноя 2021.

Метки:
  1. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    В данный момент записываю все значения массива, построчно в базу MySQL, используя INSERT в цикле... Это не правильно...
    Как можно записать массив построчно в БД не загоняя sql запрос в цикл?
    Понимаю что через оператор IN, но пока что не получается правильно написать запрос, подскажите пожалуйста на примере массива
    Код (Text):
    1. $array = [Слово1, Слово2, Слово3, Слово4];
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Один INSERT может вставлять много записей ;)

    P.S. Если записей оч. много, то можно и «многострочный» INSERT «загнать в цикл».
     
  3. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Insert может построчно вставлять записи?
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Не понял вопроса.
     
  5. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    И в итоге получится, что sql запрос все равно будет в цикле...
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Нет, если записей не оч. много, используйте один запрос.
     
  7. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Если один запрос то это так:
    Код (Text):
    1. $sql = "INSERT INTO words (word) VALUES ('$reken')";
    И как можно, значение $reken поменять на массив, при этом без цикла?
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
  9. Reken

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

    С нами с:
    4 июл 2019
    Сообщения:
    198
    Симпатии:
    5
    Примерно понял, спасибо...
    Не срабатывает мой запрос:
    Код (Text):
    1. $sql = "INSERT INTO words (word) VALUES (1, 2)";
    Чем мой запрос отличается от инструкции в примере?
    Код (Text):
    1. INSERT INTO tbl_name (a,b,c)
    2.     VALUES(1,2,3), (4,5,6), (7,8,9);
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.794
    Симпатии:
    650
    Вы серьезно? См. на формат запроса, показанный по ссылке, а не на пример. Так может быть понятнее.
    --- Добавлено ---
    Цикл, наверно, все равно нужно использовать, но сам запрос уже не будет в цикле. Только с запятушками между записями разберитесь. Или используйте implode с соотв. строкой-разделителем.
     
  11. Deadfall

    Deadfall Новичок

    С нами с:
    19 сен 2021
    Сообщения:
    7
    Симпатии:
    0
    Попробуйте может из вашей записи сделать функцию, что-то вроде:
    PHP:
    1. function insert (x, y){
    2. $sql = "INSERT INTO x VALUES y";
    3. }
    4. insert (a, (1,2,3));
    В общем главное дать идею, а реализация уже в ваших руках! ;)
     
  12. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    1. В первых скобочках - перечисление названий полей таблицы, во вторых - их значения.
    Для вставки нескольких наборов данных (строк): в части values каждый набор - в своих скобочках :)
    2. Существуют подготовленные запросы (prepared statements) и привязка переменной к параметру запроса (bindParam).
    Cобственно "подготовка" запроса выполняется один раз за пределами цикла.
    3. Выполнение нескольких запросов (вставки, обновления...) в рамках одной транзакции так-же уменьшает время их выполнения.