28

私はこのテストテーブルを持っています:

CREATE TABLE IF NOT EXISTS `test` (
    `id` INT(10) AUTO_INCREMENT,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4;

これら3つのいずれかを使用して挿入する

INSERT INTO `test` (`id`) VALUES (NULL);
INSERT INTO `test` (`id`) VALUES (0);
INSERT INTO `test` () VALUES ();

と発行

SELECT LAST_INSERT_ID();

ただし、クエリの結果は常に0

PHPmysql_insert_idPDO::lastInsertId()結果も得られません。

私はこの一日をいじっていて、それを機能させることができません。アイデア?

4

6 に答える 6

26

問題は、MySQL の phpmyadmin 設定ファイルPersistentConnectionsセットにあるようで、クエリが発行されるたびFALSEに新しい結果が発生したため、レンダリングが無効になりました。CONNECTION_IDSELECT LAST_INSERT_ID()

詳細については、後続のトピックを参照すべてのクエリで新しい CONNECTION_ID() が作成されます

また、助けてくれたdnagirlに感謝します

于 2012-12-14T16:43:06.603 に答える
12

あなたは組み合わせる必要があります

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

次に、最後の挿入IDを取得します

于 2012-12-14T14:13:01.280 に答える
1

同じ問題がありました。mysql_insert_id()または、 INSERT クエリLAST_INSERT_ID()を使用して PHP 関数内で要求されたときに 0 を返しました。

INSERT querymysql_insert_id()という関数の直後に呼び出される別の PHP 関数からの値を要求することで、問題を分類しました。

于 2016-04-25T21:28:24.093 に答える
0

私は同じ問題を抱えていましたが、トランザクションを作成することでこれを解決しました。

$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');

「コミット」の後ですが、それは常に「0」を返しました

それがあなたを助けることができることを願っています

于 2019-10-03T12:44:56.660 に答える
-2

それは完璧に機能します...試してみてください...

    $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;
    }
于 2012-12-14T14:39:41.160 に答える