Как получить все вставленные идентификаторы записей в codeigniter? - PullRequest
0 голосов
/ 15 октября 2018

Как получить все идентификаторы вставленных записей в codeigniter ??Я использую функцию insert_batch для вставки нескольких записей, но функция codeigniter $ this-> db-> insert_id () возвращает только последний идентификатор записи.// Но мне нужны все идентификаторы вставленных записей.Если у кого-то есть идея, пожалуйста, помогите.

//In codeigniter this function returns only last inserted record id.

function insertStudent(){

    $data[] = array('firstname'=>'firstname1','lastname'=>'lastname1');

    $data[] = array('firstname'=>'firstname2','lastname'=>'lastname2');

    $result = $this->db->insert_batch( 'student', $data );

    return $this->db->insert_id();

}

Ответы [ 5 ]

0 голосов
/ 04 августа 2019

Мое лучшее решение - обновить DB_driver.php.

  • С
public function is_write_type($sql)
{
  return (bool) (preg_match('/^\s*"?(SET|INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|TRUNCATE|LOAD|COPY|ALTER|RENAME|GRANT|REVOKE|LOCK|UNLOCK|REINDEX)\s+/i', $sql);
}
  • До:
public function is_write_type($sql)
{
  return (bool) (preg_match('/^\s*"?(SET|INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|TRUNCATE|LOAD|COPY|ALTER|RENAME|GRANT|REVOKE|LOCK|UNLOCK|REINDEX)\s+/i', $sql) && !preg_match('/ RETURNING /i', $sql));
}
0 голосов
/ 16 октября 2018
function insertStudent(){

    $data[] = array('firstname'=>'firstname1','lastname'=>'lastname1');

    $data[] = array('firstname'=>'firstname2','lastname'=>'lastname2');

    $result = $this->db->insert_batch( 'student', $data );

    $a= $this->db->get('student');
    $data = $a->result_array();
    echo($data[0]['id']);

}

Надежда Так что это поможет вам.

0 голосов
/ 15 октября 2018

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

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

0 голосов
/ 16 октября 2018

Вот эффективный метод:

Поскольку ваши записи имеют идентификаторы результата, я предполагаю, что они также автоматически увеличиваются.

Если это так, вы делаете это ипо-прежнему использовать insert_batch.

Вот что вы делаете:

  1. Вы берете количество вставляемых элементов:

    $ count = count ($ data);

  2. Запустите пакетную вставку:

    $ this-> db-> insert_batch ('student', $ data);

  3. Получите первый вставленный идентификатор вашей партии:

    $ first_id = $ this-> db-> insert_id ();

  4. Добавьте счет(минус 1) к вашему идентификатору вставки, чтобы получить идентификатор последней записи.

    $ last_id = $ first_id + ($ count-1);

Вот, пожалуйста!Теперь у вас есть первый и последний идентификаторы вставленных вами записей, а также все остальное между ними.

0 голосов
/ 15 октября 2018

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

  1. Получить количество данных, которые вы вставляете.(например, 2 в вашем примере)
  2. Получить идентификатор первой вставки с помощью $this->db->insert_id() (например, 30)
  3. Теперь получите идентификатор записи с последней вставкой = = 1009 * (например, 30 + (2-1) = 31)

Теперь вы можете запрашивать данные между 30 и 31 идентификаторами.

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