Подтвердить что ты не робот

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() дают результата.

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

4b9b3361

Ответ 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;
    }