Возможный дубликат:
вставить несколько строк через php-массив в mysql
Я знаю о возможности создания множественной вставки в mySQL, делая что-то вроде этого:
foreach ($array as $manuf) { $sql[] = '("'.mysql_real_escape_string($manuf['name']).'", "'.$manuf['lang'].'", "'.$mId.'")'; } $this->db->query('INSERT INTO manufacturers (name, lang ,mid) VALUES ' . implode(',', $sql) );
Интересно, есть ли лучший способ сделать это и, возможно, расширить текущую библиотеку БД (active-record), чтобы сделать ее еще меньше кода?
благодаря
Вам нужно четко указать, почему вы хотите вставить несколько строк в один оператор. Это для производительности?
Рамки предназначены для производительности и удобства программирования, но не обязательно для производительности. Я согласен с ответом @Udi Mosayev – используйте API-интерфейс инфраструктуры в его простейшем использовании.
Если вы вставляете небольшое количество строк, разница между вставкой одной строки из одного оператора и несколькими строками за оператор невелика.
Если у вас большое количество строк, и вам действительно нужно их вставлять с высокой производительностью, ничто не сравнится с LOAD DATA INFILE
. Ваши попытки оптимизировать использование INSERT
являются громоздкими и фунт-глупыми. Даже сбросив ваш PHP-массив в tmp-файл, а затем загружая его, LOAD DATA
быстрее, чем с помощью INSERT
.
Конечно. Просто используйте $this->db->insert('dbTableName', $arrayOfData)
. Массив данных – это поле-> значение, а поле – это имя столбца в вашей таблице внутри БД.
вы можете прочитать об этом здесь
Если вы собираетесь вставить действительно большое количество строк, вы должны сделать это в одном запросе. Я не думаю, что CI делает все правильно. PS: Не забывайте о максимальном размере запроса mysql.