2012-05-08 2 views
2

Что возвращает insert_id() после неудачной вставки?Вставляет ли insert_id() в Codeigniter значение false при ошибке запроса?

+0

Предполагая, что вы находитесь на MySQL, это будет переход к mysql last_insert_id(), который возвращает идентификатор последней ** SUCCESSFUL ** insert (даже если эта вставка была частью транзакции, которая была свернута назад). –

ответ

9

Я думаю, что зависит от водителя вы используете. В MySQL случае определение функции является:

/** 
* Insert ID 
* 
* @access public 
* @return integer 
*/ 
function insert_id() 
{ 
    return @mysql_insert_id($this->conn_id); 
} 

Теперь читать о mysql_insert_id:

mysql_insert_id (PHP 4, PHP 5) Получить идентификатор генерируется в последнем запросе

Параметры:
ресурс $ link_identifier [опционально]

Возврат:
Тип: int

Описание: Идентификатор генерируется для столбца AUTO_INCREMENT предыдущим запросом на успех, 0, если предыдущий запрос не генерирует значение AUTO_INCREMENT, или ложным, если установлено не было никакой связи MySQL.

1.- Таким образом, он может вернуть идентификатор, 0 (ноль) или false.
2.- И когда вы запрашиваете failed insert, он должен вернуть 0 (ноль).


Обратите внимание, что у оператора at sign (@) ошибки, проигнорирует любое сообщение об ошибке, возвращенное функцией mysql_insert_id PHP.

+0

Так что в codeigniter вы, вероятно, захотите протестировать следующим образом: 'if ($ this-> db-> insert_id()! = 0)' с '0 == false'. – Gerbus

1

большинство функций codeigniter возвращают false, если они не имеют значения, чтобы дать вам. Я имею в виду, что он не вернет insert_id, потому что нет никакой insert_id, чтобы дать из-за ошибки.

1

Он возвращает идентификатор только при вставке базы данных.

В случае успеха он будет генерировать столбец AUTO_INCREMENT по предыдущему запросу В случае отказа он возвращает 0 Возвращает FALSE, если соединение MySQL не установлено.

+0

И если ничего не вставлено? –

+0

ответить обновлено спасибо –

3

Если вы посмотрите сами драйверы базы данных, каждая версия insert_id реализована по-разному в зависимости от базовой базы данных. Например, MySQL insert_id function просто оберткой mysql_insert_id, которая возвращает:

Идентификатор генерируется для столбца AUTO_INCREMENT предыдущим запросом на успех, 0, если предыдущий запрос не генерирует значение AUTO_INCREMENT, или FALSE, если соединение MySQL не установлено.

С другой стороны, postgres function явно возвращает идентификатор (хотя я полагаю, исключение может быть выброшено, если сам запрос не удался):

$query = $this->query($sql); 
    $query = $query->row(); 
    return (int) $query->ins_id; 
Смежные вопросы