mysql_insert_id — Возвращает ID, сгенерированный при последнем INSERT-запросе.


LAST_INSERT_ID возвращает 0 в запросе вставки

Пожалуйста, я пытаюсь вставить последний идентификатор в другой столбец той же строки в mysql. Это то, что я пробовал

ОДНАКО, я ожидаю, что когда вставлена строка, char столбца также char значение ID ; Что я ожидаю

Пожалуйста, есть что-то, что я делаю неправильно. Будем рады узнать, спасибо заранее

Вы не можете использовать LAST_INSERT_ID() и вставлять в ту же транзакцию, потому что LAST_INSERT_ID() не знает значения последнего идентификатора вставки перед вставкой
Попробуйте использовать обновление:

Согласно документации MySQL LAST_INSERT_ID() возвращает сгенерированное значение, которое было установлено для столбца AUTO_INCREMENT самой последней выполненной операцией INSERT. Поэтому вам нужна следующая последовательность: insert → get last insert id → update. Вот код:

Но выясняется, что char столбца дублирует ID столбца, который, возможно, указывает на неправильную структуру БД.

Mysql_insert_id — Возвращает ID, сгенерированный при последнем INSERT-запросе.

(PHP 3, PHP 4 , PHP 5)

mysql_insert_id — Возвращает ID, сгенерированный при последнем INSERT-запросе.

mysql_insert_id() возвращает >link_identifier . Если параметр link_identifier не указан, используется последнее открытое соединение.

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


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

Пример 1. Пример использования mysql_insert_id()

( «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 ());
?>

Beware, mysql_insert_id() only returns the value of the last syntaxically correct insert statement.

If your code has a problem and the insert is not understood by the server then the value of the last working insert command is returned.

Put something else in place such as «select count( id ) from table» before and after the mysql_insert_id() call to ensure that a row was inserted.

A bit more on return values:
mysql_insert_id() returns 0 if you haven’t actually manipulated anything yet.

Also, it returns 0 even if the DB connection is lost[0] between inserting and calling mysql_insert_id() — so you can always count on getting an integer.

[0] By ‘lost’ I mean e.g. a DB crash. Actually closing the open link and then trying to communicate with the DB will of course result in an error.

It’s possible to do the same with M$ Server.


function odbc_insert_id()
<
$query = «SELECT @@IDENTITY AS ID;»;
$result = odbc_exec($this->m_rConnectionID, $query);
$row = odbc_fetch_object($result);
return $row->ID;
>

In reply to: sly at noiretblanc dot org:

Make sure that auto_increment has an capital A as the first letter, otherwise it WON’T work! So you have to spell it as Auto_increment. And then it works fine.

I believe the «resource link» being referred to is not what is returned from mysql_query() but the $link returned from mysql_connect(). mysql_insert_id() will just use the most recent connection if there is no explicit $link being used.

So the above example in the manual page itself should behave the same with mysql_insert_id($link) at the end instead of the mysql_insert_id() they used. If you had multiple connections, the $link might come in handy.

Also in reading the mysql manual itself, there is some enlightening information on the fact that this does appear to be totally safe to use because it is on a per-connection basis.

Here’s the relevant quote from the manual on LAST_INSERT_ID() which is located here: http://dev.mysql.com/doc/mysql/en/Information_functions.html

«The last ID that was generated is maintained in the server on a per-connection basis. This means the value the function returns to a given client is the most recent AUTO_INCREMENT value generated by that client. The value cannot be affected by other clients, even if they generate AUTO_INCREMENT values of their own. This behavior ensures that you can retrieve your own ID without concern for the activity of other clients, and without the need for locks or transactions.»

Sounds safe to me. I couldn’t imagine this would be done any other way *but* on a per-connection basis, otherwise chaos would ensue. The only way to test it would be to perform a multi-thread type test. Perhaps someone is up for it and wants to post their results somewhere? :)

If you use this function after doing an INSERT . SELECT to insert multiple rows at once, you get the autonumber ID of the *first* row added by the INSERT.

e.g. if there are 4 records in table ‘init’ that have column ‘type’ = 2
I want to add these 4 records to table ‘game’
Table game has an autonumber column ‘game_id’ that is currently at 32.

If I do this query:


INSERT INTO game (type, players, rounds)
SELECT type, players, rounds FROM init
WHERE type = 2

Then mysql_insert_id() will return 33, not 36.

In response to treylane at example dot com.

It is very very very important that you put in an «or die» or some other form of error handling.

Some scripts can fail invisibly and insert invalid data throughout your whole database because of mysql_insert_id
inserting the last successful insertid rather than reporting that the last attempt failed.

example of an or die statement.

$result = mysql_query($sql)
or die(«Invalid query: » . mysql_error());
$Event >

If you want to use the ID that was generated for one table and insert it into a second table, you can use SQL statements like this:

INSERT INTO foo (auto,text)
VALUES(NULL,’text’); # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
VALUES(LAST_INSERT_ID(),’text’); # use ID in second table

It works even without inserting the NULL value for some reason ;)
The following is great for monitoring:
$new_ > print «New id: $new_id\n»;

Как получить номер последней добавленной записи?

Есть база данных на Access (возможно потом будет перенесено на MSSQL).
Как при добавлении новой записи в таблицу получить ее номер? (id — autoincrement)
В php есть такая функция mysql_insert_id — Возвращает идентификатор, сгенерированный при последнем INSERT-запросе.
Есть ли что-либо такое в delphi?


Внимание
24.12.2013, 08:43

Получение id добавленной записи
Добрый день! Есть такая проблема. При добавлении новой записи в таблицу как опредилить.

Последний ID добавленной записи
Добрый вечер! Скажите пожалуйста, как узнать ID последней добавленной записи? Это нужно, чтобы.

Как получить id последней добавленной записи в БД в MSSQL
Привет! Народ, кто-нить знает как получить id последней добавленной записи в БД в MSSQL? Нужен.

Как получить индекс последней добавленной записи
Как получить последний добавленный индекс? Добавлено через 11 секунд Почему нельзя использовать.

mysql_insert_ >

Я знаю, что есть много тем с тем же названием. Но в основном это запрос, который был вставлен в неправильном месте. Но я думаю, что правильно. Поэтому проблема в том, что я все равно получаю 0, даже когда данные вставляются в db. Кто-нибудь знает ответ, где я могу ошибаться?

Большое спасибо, потому что я уже почти целый день ломаю голову над этим. (и, вероятно, это что-то маленькое и глупое)

Согласно руководству mysql_insert_id возвращается:

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

Так как он не дает вам значение false а не правильный номер, это означает, что запрошенная таблица не генерирует значение автоматического увеличения.

Есть две возможности, о которых я могу думать:

  1. В таблице нет поля auto_increment
  2. Поскольку вы не предоставляете ссылку на mysql_insert_id (), но используя ссылку с mysql_query (), это может быть неправильная таблица, запрашиваемая при извлечении последнего вставленного идентификатора.


  1. Убедитесь, что у него есть поле auto_increment
  2. Укажите ссылку: $waarde = mysql_insert_id($this->db);

Возможно, ваш запрос INSERT не был успешным – например, возможно, вы пытались вставить повторяющиеся данные в столбец, данные которого должны быть уникальными?

Если идентификатор действительно настроен на автоматическое увеличение и по-прежнему получает «0», так как ваш ответ вызывает столбец и значение, которое я испытал это только позже, я заметил, что число моих столбцов не соответствует значениям count.

При вызове mysql_insert_id () Codeigniter имеет странное поведение. Функция возвращает 0 после первого вызова. Поэтому вызов дважды возвращается 0.

Используйте переменную вместо вызова функции больше времени:

(Это не ваше дело, но я оставляю это на случай, если кому-то это понадобится).

Обратите внимание, что если вы используете запрос вставки / обновления MYSQL, например:

Идентификатор будет возвращаться только тогда, когда произойдет INSERT, но если ваш запрос привел к UPDATE, вы всегда получите 0.

Mysql_insert_id — Возвращает ID, сгенерированный при последнем INSERT-запросе.

допустим есть 1000 инсертов в минуту,mysql_insert_id() — может вернуть не то значение.
Так как 2 запроса, могут в очередь на мускуль стать не один за другим, а между ними еще инсерт влезет.


Решение нашел через использование этих двух запросов в одной тразакции, тогда все будет суперово, и возвратится то что нужно.

допустим есть 1000 инсертов в минуту,mysql_insert_id() — может вернуть не то значение.
Так как 2 запроса, могут в очередь на мускуль стать не один за другим, а между ними еще инсерт влезет.

Решение нашел через использование этих двух запросов в одной тразакции, тогда все будет суперово, и возвратится то что нужно.

Mysql_insert_id — Возвращает ID, сгенерированный при последнем INSERT-запросе.

mysql_insert_id() Возвращает ID, сгенерированный при последнем INSERT-запросе.

а как узнать этот ID не делая INSERT-запроса
другими словами как узнать ID строки, который она будет иметь если сделать инсерт запрос

$new_ >INSERT-запрос
$ >if($new_ ;

он появляется как +1 к текущему

но я могу вручную удалить пару строк

да.
берётся текущее id (из внутреннего поля) и добавляется еденица.

проблема вся в том, что id генерится во время вставки. то есть ты посмотрел значение (допустим) счётчика, после этого кто-то добавил запись и вычисленный тобой номер достался ему, а не тебе.
Такого движок БД не должен допускать, поэтому доступ к этому счётчику закрыт.


Получение id добавленной записи в PostgeSQL

Каким бы супер-пупер спецом вы не были — в процессе разработки эпизодически попадаются интересные и удобные вещи о которых, казалось бы, давно бы пора знать, но все никак не складывалось. Этакий ништячок, найдя который хочется воскликнуть: «Эврика!». Вот таким ништячком для меня стал элемент синтаксиса INSERT в PostgreSQL, которым я и хочу поделиться с вами.

Ситуация: После добавления записи в базу нужно получить id этой самой свеже-вставленной записи.
Решение на PostgreSQL: INSERT… RETURNING id где id — это PRIMARY_KEY в таблице.

Просто и элегантно, не правда ли?

Подробный пример:

mysql_insert_id

mysql_insert_id — получает id, сгенерированный предыдущей операцией INSERT.

Описание

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() сразу после запроса, генерирующего это значение.

Примечание: значение MySQL-функции LAST_INSERT_ID() всегда содержит самое последнее сгенерированное значение AUTO_INCREMENT и не восстанавливается между запросами.

08.06.2010, 14:55 #5



mysql_insert_id() конвертирует return-тип внутренней MySQL C API-функции mysql_insert_id() в тип long (называемый в РНР int ). Если ваш столбец AUTO_INCREMENT имеет тип столбца BIGINT, значение, возвращаемое функцией mysql_insert_id(), будет некорректным. Тогда используйте внутреннюю MySQL SQL-функцию LAST_INSERT_ID() в SQL-запросе.

MySQL: LAST_INSERT_ID() возвращает 0

У меня есть эта тестовая таблица:

вставка с использованием любого из этих трех

но запрос всегда приводит к 0 .

PHP mysql_insert_id и PDO::lastInsertId() дают результата.

Я играл весь этот день и не могу заставить его работать. Идеи?

Проблема заключалась в том, что в конфигурационном файле MySQL phpmyadmin PersistentConnections установлена ​​ FALSE проблема, которая привела к появлению нового CONNECTION_ID при каждом запросе, поэтому рендеринг SELECT LAST_INSERT_ID() неэффективен.

Дополнительная информация в следующем разделе Каждый запрос создает новый CONNECTION_ID()

Также спасибо dnagirl за помощью

Только мои 50 центов для этой проблемы, я просто заметил, что вы не получите LAST_INSERT_ID больше, чем 0 , если в таблице нет AUTO_INCREMENT , установленного в индекс.

Я потратил около получаса на это. Оказывается, я продолжаю получать LAST_INSERT_ID() из 0 , который для этой таблицы на самом деле нормально.


Mysql_insert_id — Возвращает ID, сгенерированный при последнем INSERT-запросе.

(PHP 3, PHP 4, PHP 5)

mysql_insert_id — Возвращает ID, сгенерированный при последнем INSERT-запросе.

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 и не обнуляется между запросами.

Предупреждение!

Пример 1. Пример использования mysql_insert_id()

Внимание
( «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 ());
?>

Пред. Начало След.
mysql_info Уровень выше mysql_list_dbs

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

Илон Маск рекомендует:  Что такое код ftp_put
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL