Вопрос из двух частей:
-
В моем CodeIgniter script я начинаю транзакцию, а затем вставляю строку, устанавливая insert_id() в переменную php, вставляя больше строк в другую таблицу, используя новый идентификатор в качестве внешнего ключа, и затем я делаю все.
Итак, мой вопрос: если все не фиксирует до окончания транзакции, как mysql может вернуть последний идентификатор вставки, если ничего не было вставлено? Мой script работает (почти) отлично, с новым ID, который используется в последующих запросах.
(я говорю "почти", потому что, используя драйвер PDO mysql, иногда первая вставка, которая должна возвращать insert_id(), дублируется - она вставлена дважды. Любая идея, почему это было бы? получение последнего идентификатора? Это никогда не произойдет, если вы используете драйвер mysqli или mysql.)
-
Я сначала написал script без транзакций, поэтому у меня есть код, который проверяет ошибки mysql на этом пути, например:
if(!$this->db->insert($table, $data)) { //log message here }
Как это влияет на процесс mysql, как только я завернул весь мой код mysql в транзакции? Это не вызывает никаких видимых ошибок (надеюсь, не связанных с проблемой, указанной выше), но следует ли ее удалить?
Спасибо.