簡體   English   中英

如何在 PHP 中獲取 MySQL 表的最后插入 ID?

[英]How do I get the last inserted ID of a MySQL table in PHP?

我有一個經常插入新數據的表。 我需要獲取表的最后一個 ID。 我怎樣才能做到這一點?

它類似於SELECT MAX(id) FROM table嗎?

如果您使用 PDO,請使用PDO::lastInsertId

如果您使用的是 Mysqli,請使用mysqli::$insert_id

如果您仍在使用 Mysql:

請不要在新代碼中使用mysql_*函數 它們不再被維護並被正式棄用 看到 紅框了嗎? 了解准備好的語句,並使用PDOMySQLi -本文將幫助您決定哪個。 如果您選擇 PDO,這里有一個很好的教程

但如果必須,請使用mysql_insert_id

有一個函數可以知道當前連接中插入的最后一個 id 是什么

mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();

加上使用max是一個壞主意,因為如果您的代碼在兩個不同的會話中同時使用,它可能會導致問題

該函數稱為mysql_insert_id

沒關系。 你也可以使用LAST_INSERT_ID()

使用PDO

$pdo->lastInsertId();

使用Mysqli

$mysqli->insert_id;

請不要在新代碼中使用mysql_*函數 它們不再被維護並被正式棄用 看到 紅框了嗎? 了解准備好的語句,並使用PDOMySQLi -本文將幫助您決定哪個。 如果您選擇 PDO,這里有一個很好的教程

使用mysql_insert_id()函數。

在這里看到類似的問題

假設您編寫的內容是唯一且自動遞增的,那么您編寫的內容將為您提供最大的id ,假設您可以接受並發問題。
由於您使用 MySQL 作為數據庫,因此有特定的函數LAST_INSERT_ID()僅適用於執行插入操作的當前連接。
PHP 也為此提供了一個特定的函數,稱為mysql_insert_id

試試這個應該可以正常工作:

$link = mysqli_connect("localhost", "my_user", "my_password", "world");

$query = "INSERT blah blah blah...";
$result = mysqli_query($link, $query);

echo mysqli_insert_id($link);

在 codeigniter 中獲取最后插入的 id 執行插入查詢后,只需在數據庫上使用一個名為insert_id()函數,它將返回最后插入的 id

前任:

$this->db->insert('mytable',$data);
echo $this->db->insert_id(); //returns last inserted id

一行

echo $this->db->insert('mytable',$data)->insert_id();

可以使用mysql_insert_id() ,但有一個關於使用它的特定注意事項,您必須在執行 INSERT 查詢后調用它,意味着在同一個腳本會話中。 如果您使用它,否則它將無法正常工作。

您可以通過內置的php函數mysql_insert_id();獲取最新插入的id mysql_insert_id();

$id = mysql_insert_id();

您還可以通過以下方式獲得最新的 ID

$id = last_insert_id();

干凈簡單 -

$selectquery="SELECT id FROM tableName ORDER BY id DESC LIMIT 1";
$result = $mysqli->query($selectquery);
$row = $result->fetch_assoc();
echo $row['id'];

注意:如果你用一個語句進行多次插入,mysqli::insert_id 將不正確。

桌子:

create table xyz (id int(11) auto_increment, name varchar(255), primary key(id));

現在如果你這樣做:

insert into xyz (name) values('one'),('two'),('three');

mysqli::insert_id 將是 1 而不是 3。

要獲得正確的值,請執行以下操作:

mysqli::insert_id + mysqli::affected_rows) - 1

這是文檔,但有點晦澀。

我更喜歡使用純 MySQL 語法來獲取我想要的表的最后一個 auto_increment id。

php mysql_insert_id() 和 mysql last_insert_id() 只給出最后一個事務 ID。

如果您想要架構中任何表的最后一個 auto_incremented ID(不僅是最后一個事務),您可以使用此查詢

SELECT AUTO_INCREMENT FROM information_schema.TABLES
    WHERE TABLE_SCHEMA = 'my_database' 
    AND TABLE_NAME = 'my_table_name';

就是這樣。

很遺憾沒有看到任何帶有示例的答案。

使用Mysqli::$insert_id

$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$mysqli->query($sql);
$last_inserted_id=$mysqli->insert_id; // returns last ID

使用PDO::lastInsertId

$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$database->query($sql);
$last_inserted_id=$database->lastInsertId(); // returns last ID

使用MySQLi事務我有時無法獲得mysqli::$insert_id ,因為它返回 0。特別是如果我使用存儲過程,即執行INSERT s。 所以事務中有另一種方式:

<?php

function getInsertId(mysqli &$instance, $enforceQuery = false){
    if(!$enforceQuery)return $instance->insert_id;

    $result = $instance->query('SELECT LAST_INSERT_ID();');

    if($instance->errno)return false;

    list($buffer) = $result->fetch_row();

    $result->free();

    unset($result);

    return $buffer;
}

?>

使用mysqli因為mysql正在貶低

<?php
$mysqli = new mysqli("localhost", "yourUsername", "yourPassword", "yourDB");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}
// Conside employee table with id,name,designation
$query = "INSERT INTO myCity VALUES (NULL, 'Ram', 'Developer')";
$mysqli->query($query);

printf ("New Record has id %d.\n", $mysqli->insert_id);

/* close connection */
$mysqli->close();
?>

請使用PDP,然后嘗試

$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();

通過所有這些討論,我認為檢查最大ID的原因是要知道下一個ID是什么(如果我的最大ID是5,則下一個將是5 + 1 = 6)。

>>如果不是這個原因,我最好的歉意

如果其他人在您的CHECK和INSERT之間插入信息會給您錯誤的ID。

因此,可以解決是否創建包含時間戳或其他唯一值的哈希。

然后,在同一函數中,您可以使用空值和哈希值插入信息。 如果您選擇了AUTO_INCRECEMENT,則將創建ID。

然后,在相同的函數中,您仍將擁有哈希,並且可以使用相同的哈希查找id。 然后,您可以使用mysql UPDATE完成填充空值。

這包括更多的連接,但仍然是一種方法。

祝你好運解決它。

$ lastid = mysql_insert_id();

我試過

mysqli_insert_id($dbConnectionObj)

這將返回當前連接的最后插入的 id,因此如果您正確管理您的連接,這應該可以工作。 至少為我工作。

嘗試這個:

$sql = "INSERT INTO table_name VALUES (nininini)";
mysqli_query($connection, $sql);
mysqli_insert_id($connection);

如果您的表具有AUTO INCREMENT列(如UserID,Emp_ID等),則可以使用此查詢獲取最后插入的記錄SELECT * FROM table_name,其中UserID =(從table_name選擇MAX(UserID))在PHP代碼中:

$con = mysqli_connect('localhost', 'userid', 'password', 'database_name');
                                if (!$con) {
                                    die('Could not connect: ' . mysqli_error($con));
                                }
                                $sql = "SELECT * FROM table_name where UserID=(select MAX(UserID)from table_name)";
                                $result = mysqli_query($con, $sql);

然后,您可以使用提取的數據作為需求

mysql_query("INSERT INTO mytable (product) values ('kossu')");

printf("Last inserted record has id %d\n", ***mysql_insert_id()***);

暫無
暫無

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

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