Как получить идентификаторы для массовых вставок в codeigniter? - PullRequest
0 голосов
/ 16 марта 2012

В Codeigniter, если я создаю строку SQL, которая выполняет несколько вставок, как мне получить вставленный идентификатор каждого?

// Prepare the SQL
$sql = '';
$chunk = array(array(), array(), array()); // The elements are arrays
foreach($chunk as $arr){
    // The first field is the primary key (INT NOT NULL auto_increment)
    $sql .= "(NULL, {$arr[0]}, {$arr[1]}, {$arr[2]}, {$arr[3]}, {$arr[4]})";
    if($arr!= $last) $sql .= ', ';
}

// Start inserting into the db
$this->db->trans_start();
$this->db->query('INSERT INTO my_table VALUES '.$sql);
// A few other queries go here which need the IDs of the previous insert
$this->db->trans_complete();

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

Ответы [ 2 ]

0 голосов
/ 18 марта 2012

Я решил вместо этого использовать транзакции.

0 голосов
/ 16 марта 2012

Возможно, вам нужно записать МАКС-идентификатор перед вставкой, а затем выбрать все идентификаторы, которые больше, чем после массовой вставки.

РЕДАКТИРОВАТЬ:

Iнашел это в руководстве по MySQL :

Правильный способ использовать LOCK TABLES и UNLOCK TABLES с транзакционными таблицами, такими как таблицы InnoDB, - начать транзакцию с помощью SET autocommit =0 (не START TRANSACTION), за которым следуют LOCK TABLES, и не вызывать UNLOCK TABLES, пока вы явно не совершите транзакцию.

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