簡體   English   中英

MySQL:LAST_INSERT_ID()返回0

[英]MySQL: LAST_INSERT_ID() returns 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_idPDO::lastInsertId()沒有結果。

我整整一天都在玩弄它無法讓它發揮作用。 想法?

問題似乎是MySQL的phpmyadmin配置文件PersistentConnections設置為FALSE ,每次發出查詢時都會產生一個新的CONNECTION_ID - 因此呈現SELECT LAST_INSERT_ID()無效。

后續主題中的更多信息每個查詢都會創建一個新的CONNECTION_ID()

還要感謝dnagirl的幫助

對於這個問題我只需要50美分,我只是注意到如果你的表沒有將AUTO_INCREMENT設置為索引,你將不會得到大於0LAST_INSERT_ID

我浪費了大約半個小時。 事實證明我一直得到一個0LAST_INSERT_ID() ,對於這個表實際上是好的。

你必須結合起來

INSERT INTO test (title) VALUES ('test');SELECT LAST_INSERT_ID();

然后,您將獲得最后一個插入ID

我遇到過同樣的問題。 當在具有INSERT查詢的PHP函數內請求時, mysql_insert_id()LAST_INSERT_ID()返回0。

我通過在INSERT查詢函數之后從一個單獨的PHP函數請求mysql_insert_id()的值來對問題進行排序。

它完美地工作......試試吧......

    $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;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM