MySQL Значение поля с AUTO_INCREMENT последней операции INSERT

Быстрый переход:
Михаил

Михаил

Member
#1   17 июля 2008 08:25
Такой вопросик.

Есть таблица в базе данных MySQL. В нее добавляется запись запросом INSERT. Как мне после выполнения запроса получить значение поля которое автоматически генерируется в колонке AUTO_INCREMENT?

Конечно сразу за этим запросом можно выполнить запрос типа "SELECT id FROM myTable WHERE chtoTo='lastInserted'"... то есть выбрать id (это и есть поле с AUTO_INCREMENT) зная последние введеные значения, но хотелось бы получить наверняка именно тот id, который был добавлен последним, вдруг lastInserted уже есть в этой таблице. :|
Нет ничего более статичного в этом мире, чем динамика
Алексей

Алексей

Administrator
#2   17 июля 2008 08:39
Для этого можно воспользоваться функцией php:

int mysql_insert_id ( [resource link_identifier] )

функция mysql_insert_id() возвращает ID, сгенерированный колонкой с AUTO_INCREMENT последним запросом INSERT к серверу, на который ссылается переданный функции указатель link_identifier. Если параметр link_identifier не указан, используется последнее открытое соединение.

mysql_insert_id() возвращает 0, если последний запрос не работал с AUTO_INCREMENT полями. Если вам надо сохранить значение, убедитесь, что mysql_insert_id() вызывается сразу после запроса.

Замечание: Значение в SQL функции MySQL LAST_INSERT_ID() всегда содержит последний сгенерированный ID и не обнуляется между запросами.

ВНИМАНИЕ
mysql_insert_id() конвертирует возвращаемый функцией MySQL C API тип значения функции mysql_insert_id() в тип long int (называемый int в PHP). Если ваша колонка AUTO_INCREMENT имеет тип BIGINT, значение, возвращаемое функцией mysql_insert_id(), будет искажено. Вместо него используйте функцию SQL LAST_INSERT_ID().

Например:
<?php
    mysql_connect("localhost", "mysql_user", "mysql_password") or
        die("Could not connect: " . mysql_error());
    mysql_select_db("mydb");

    mysql_query("INSERT INTO mytable (product) values ('kossu')");
    printf ("Last inserted record has id %d\n", mysql_insert_id());
?> 

Быстрота и надежность... Ну и красота тоже, конечно