Можно ли сразу добавить несколько записей в jDatabase?

Вместо того, чтобы использовать цикл, могут ли функции базы данных Joomla создавать инструкцию SQL, подобную этой?

INSERT INTO #__tablename (col1, col2)
ЗНАЧЕНИЯ
 ('1', 'one'),
 ('2', 'two'),
 («3», «три»)
...
 ('999', 'три'),

Документы в Доступ к базе данных с использованием JDatabase см. в разделе Транзакции и использование SQL или объектов, но не упоминается несколько значений в в любом случае.

11 голосов | спросил GDP 12 FriEurope/Moscow2014-12-12T17:27:01+03:00Europe/Moscow12bEurope/MoscowFri, 12 Dec 2014 17:27:01 +0300 2014, 17:27:01

3 ответа


12

Это может быть выполнено с помощью -> insert () и -> values ​​(), причем $ values ​​ является массив строк со столбцами для вставки.

$ db = JFactory :: getDbo ();
$ query = $ db-> getQuery (true);

$ columns = array ('col_one', 'col_two');
$ values ​​= array ();
//Правильное экранирование /кавычки должно быть сделано здесь, и, вероятно, в цикле, но загромождал ответ, поэтому опустил его
$ values ​​[] = '1, "one"';
$ values ​​[] = '2, "two"';
$ values ​​[] = '3, "three"';
$ values ​​[] = '999, "nineninetynine"';

$ Query- > вставки ($ db- & Gt; quoteName ( '#__ имя_таблицы'));
$ Query- > столбцы ($ столбцы);
$ Query- > значение ($ значения);
$ Db- > SetQuery ($ запроса);
$ Db- > запрос ();

SQL, который создается с помощью echo $ query-> dump ()

INSERT INTO `xyz_tablename`
(col_one, col_two) ЦЕННОСТИ
(1, «один»), (2, «два»), (3, «три»), (999, «ниненинетинин»)
ответил GDP 12 FriEurope/Moscow2014-12-12T18:17:34+03:00Europe/Moscow12bEurope/MoscowFri, 12 Dec 2014 18:17:34 +0300 2014, 18:17:34
3

Основные черты Joomla поддерживают базовые SQL-запросы. Вы можете создать класс для хранения нескольких вставок и создать один окончательный запрос для выполнения одной вставки в конце.

публичная функция flushInserts ()
{
    $ db = JFactory :: getDbo ();

    foreach ($ this-> bulk_tables как таблица $)
    {
        //Нет вставок
        if (! array_key_exists ($ table, $ this-> bulk_inserts))
        {
            Продолжать;
        }

        $ tableq = $ db-> qn ($ table);

        $ insertSet = $ this-> bulk_inserts [$ table];
        $ values ​​= implode (',', $ insertSet);
        $ query = 'INSERT INTO'. $ tableq. ' ЗНАЧЕНИЯ ' . $. ';';

        $ Db- > SetQuery ($ запроса);
        $ Db- > выполнение ();

        if ($ error = $ db-> getErrorMsg ())
        {
            throw new Exception ($ error);
        }
    }

    $ this-> bulk_inserts = array ();
}
ответил Anibal 12 FriEurope/Moscow2014-12-12T17:55:38+03:00Europe/Moscow12bEurope/MoscowFri, 12 Dec 2014 17:55:38 +0300 2014, 17:55:38
0

Добавление к ответу @ ВВП

...
$ columns = array ('user_id', 'type', 'object', 'lvl', 'date');
$ values ​​= array ();
foreach ($ batch as $ row) {
    $ array = array (
        $ Row- > идентификатор_пользователь,
        $ Db- > котировка ($ row- > тип),
        $ Db- > котировка ($ row- > объект),
        $ Db- > котировка ($ row- > лвл),
        $ Db- > котировка ($ row- > дата),
    );
    $ values ​​[] = implode (',', $ array);
}
$ Query- > вставки ($ db- & Gt; quoteName ( '#__ activity_log'));
$ Query- > колонки ($ db- > quoteName ($ столбцы));
$ Query- > значение ($ значения);
...
ответил 9KSoft 24 J000000Tuesday18 2018, 17:32:29

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132