PHP Получить последний идентификатор вставки из соединения ODBC - PullRequest
7 голосов
/ 23 апреля 2009

Как получить последний идентификатор вставки из базы данных, используя соединение ODBC?

Я ищу решение, похожее на функцию mysql_insert_id ().

Ответы [ 8 ]

3 голосов
/ 25 февраля 2010

ВЫБРАТЬ @@ IDENTITY AS ID

3 голосов
/ 23 апреля 2009

Если вы используете базы данных с PHP, я настоятельно рекомендую использовать PDO (простая обертка базы данных для многих распространенных механизмов баз данных, все больше и больше поддерживаемых, часть канона PHP), и, следовательно, использовать PDO: : lastInsertId , если ваша база данных поддерживает эквивалент mysql_insert_id.

Не используйте «SELECT max (id) FROM table;» поскольку это может привести к серьезным причудливым и труднодоступным ошибкам в дальнейшем.

* ** ОБНОВЛЕНИЕ : Хорошо, вы используете ODBC, и я подозреваю, что вы набрали odbc_cursor . Я по-прежнему настойчиво рекомендую использовать PDO, поскольку он имеет драйвер ODBC. (ODBC в моих глазах - сварливый горький старик, который бормочет себе под нос, рушит свой грузовик, который разваливается, когда модные парни из PDO несутся мимо в своих сексуальных VOLVO S90)

0 голосов
/ 21 мая 2015

Использование в MySQL

SELECT *
FROM table_name
ORDER BY Id Desc
LIMIT 1

Использование в SQL Server

SELECT top 1 *
FROM table_name
ORDER BY Id Desc
0 голосов
/ 07 сентября 2010

Я использовал «SELECT @@ IDENTITY AS LastID» при работе с PHP / MSSQL через ODBC. Это привело к возникновению некоторых проблем с сервером SQL 2005 (или 2000?). В любом случае, если вы делаете так:

SET NOCOUNT ON<br/> [NOW INSERT YOUR INSERT SQL QUERY]<br/> SELECT @@IDENTITY AS LastID

с любой версией MSSQL-сервера все будет в порядке.

«SET NOCOUNT ON» не позволит серверу sql отправлять сообщения наподобие «1 строка вставлена», что будет поддерживать работу вашего скрипта.

0 голосов
/ 02 июня 2010

Если у вас MySQL под ODBC - вы можете использовать следующий запрос:

"SELECT LAST_INSERT_ID( );"

Это должно выполняться сразу после выполнения INSERT-запроса.

Для другой базы данных - используйте другие конкретные запросы ...

0 голосов
/ 24 апреля 2009

Использование

SELECT max(id) FROM table;

должно быть хорошо внутри транзакции, или ODBC не поддерживает транзакции?

0 голосов
/ 23 апреля 2009

Вы вставляете строки в свою базу данных через PHP? Если это так, возможно, вы можете сгенерировать уникальный первичный ключ с помощью uniqid () - тогда вы будете знать идентификатор без необходимости запрашивать базу данных.

Если невозможно обновить тип ключа, возможно, вы все равно можете вставить уникальный идентификатор при выполнении вставки, чтобы вы могли выполнить запрос, подобный этому:

SELECT id FROM mytable WHERE rowid = '$myuniqueid'

Таким образом, вы гарантируете, что извлекаете правильный идентификатор из базы данных - гораздо лучшее решение, чем MAX (id).

0 голосов
/ 23 апреля 2009

Это зависит от типа базы данных, но посмотрите синтаксис SEQUENCE для вашего rdbm.

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