首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 中 mysql_insert_id() 獲取最新自增 ID 的完整指南

     編輯:PHP 相關知識

函數簡介

mysql_insert_id() 用於返回上一步 INSERT 操作產生的 AUTO_INCREMENT ID。若上一查詢未產生自增 ID,則返回 0。注意:此函數屬於已棄用的 mysql 擴展,新項目請使用 mysqli 或 PDO。

語法與參數

mysql_insert_id([resource $link_identifier = NULL]) : int
  • $link_identifier:可選,MySQL 連接標識符。若省略,使用最近打開的連接。

使用示例

<?php
$con = mysql_connect("localhost", "hello", "321");
if (!$con) {
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("test_db", $con);

$sql = "INSERT INTO person VALUES ('Carter', 'Thomas', 'Beijing')";
$result = mysql_query($sql, $con);

echo "ID of last inserted record is: " . mysql_insert_id($con);

mysql_close($con);
?>

關鍵注意事項

  1. 必須緊跟 INSERT 執行:若中間執行了其他查詢(SELECT/UPDATE/DELETE),返回值會被重置。
  2. 僅適用於單條 INSERT:批量插入時僅返回第一條記錄的 ID。
  3. 連接上下文敏感:多連接環境下務必傳入正確的 $link_identifier。

替代方案:MySQL 內建 LAST_INSERT_ID()

MySQL 提供 SQL 層面的 LAST_INSERT_ID(),特點如下:

  • 不會被後續非 INSERT 語句重置。
  • 可通過 SELECT LAST_INSERT_ID(); 直接查詢。
  • 批量插入時同樣只返回第一條記錄的自增 ID。
  • 在存儲過程、觸發器中更可靠。

現代最佳實踐(mysqli / PDO)

mysqli 面向對象風格

$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("INSERT INTO person (name) VALUES ('John')");
$lastId = $mysqli->insert_id;

PDO

$pdo = new PDO("mysql:host=localhost;dbname=database", "user", "password");
$pdo->exec("INSERT INTO person (name) VALUES ('John')");
$lastId = $pdo->lastInsertId();

總結

雖然 mysql_insert_id() 在舊代碼中常見,但新項目強烈建議使用 mysqli_insert_id() 或 PDO::lastInsertId(),並結合預處理語句提升安全性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved