MySQL: LAST_INSERT_ID() возвращает 0
У меня есть эта тестовая таблица:
CREATE TABLE IF NOT EXISTS 'test' (
'id' INT(10) AUTO_INCREMENT,
PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=4;
вставка с использованием любого из этих трех
INSERT INTO 'test' ('id') VALUES (NULL);
INSERT INTO 'test' ('id') VALUES (0);
INSERT INTO 'test' () VALUES ();
и выдача
SELECT LAST_INSERT_ID();
но запрос всегда приводит к 0
.
PHP mysql_insert_id
и PDO::lastInsertId()
дают результата.
Я играл весь этот день и не могу заставить его работать. Идеи?
Ответы
Ответ 1
Проблема заключалась в том, что в конфигурационном файле MySQL phpmyadmin PersistentConnections
установлена FALSE
проблема, которая привела к появлению нового CONNECTION_ID
при каждом запросе, поэтому рендеринг SELECT LAST_INSERT_ID()
неэффективен.
Дополнительная информация в следующем разделе Каждый запрос создает новый CONNECTION_ID()
Также спасибо dnagirl за помощью
Ответ 2
Только мои 50 центов для этой проблемы, я просто заметил, что вы не получите LAST_INSERT_ID
больше, чем 0
, если в таблице нет AUTO_INCREMENT
, установленного в индекс.
Я потратил около получаса на это. Оказывается, я продолжаю получать LAST_INSERT_ID()
из 0
, который для этой таблицы на самом деле нормально.
Ответ 3
вам нужно объединить
INSERT INTO test (title) VALUES ('test');SELECT LAST_INSERT_ID();
Затем вы получите последний идентификатор вставки
Ответ 4
У меня была такая же проблема. mysql_insert_id()
или LAST_INSERT_ID()
возвращаются 0 при запросе внутри функции PHP с запросом INSERT.
Я отсортировал проблему, запросив значение mysql_insert_id()
из отдельной функции PHP, названной сразу после функции, которая INSERT query.
Ответ 5
У меня были те же проблемы, но я решил их, создав транзакцию.
$db->begin();
$sql = "INSERT INTO 'test' VALUES('test')";
if ($db->query($sql))
{
$id = $db->last_insert_id('test');
$db->commit();
return $id;
}
else{
$db->rollback();
return -1;
}
Я пытался
return $db->last_insert_id('test');
после "commit", но всегда возвращалось "0"
надеюсь, что это может помочь вам
Ответ 6
он отлично работает... попробуйте...
$result = mysql_query("INSERT INTO `test` (`title`) VALUES ('test')");
if ($result) {
$id = mysql_insert_id(); // last inserted id
$result = mysql_query("SELECT * FROM tablename WHERE id = $id") or die(mysql_error());
// return user details
if (mysql_num_rows($result) > 0) {
return mysql_fetch_array($result);
} else {
return false;
}
} else {
return false;
}