MySQLi 插入 ID
在具有 AUTO_INCREMENT 列的表上檢索由 INSERT
查詢生成的最後一個 ID。
物件導向的風格
$id = $conn->insert_id;
程式風格
$id = mysqli_insert_id($conn);
如果連線上沒有先前的查詢,或者查詢未更新 AUTO_INCREMENT 值,則返回零。
更新行時插入 id
通常,UPDATE
語句不返回插入 ID,因為僅在儲存(或插入)新行時才返回 AUTO_INCREMENT
id。更新新 id 的一種方法是使用 INSERT ... ON DUPLICATE KEY UPDATE
語法進行更新。
設定示例如下:
CREATE TABLE iodku (
id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(99) NOT NULL,
misc INT NOT NULL,
PRIMARY KEY(id),
UNIQUE(name)
) ENGINE=InnoDB;
INSERT INTO iodku (name, misc)
VALUES
('Leslie', 123),
('Sally', 456);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
+----+--------+------+
| `id` | name | misc |
+----+--------+------+
| 1 | Leslie | 123 |
| 2 | Sally | 456 |
+----+--------+------+
IODKU 執行更新的情況和 LAST_INSERT_ID()
檢索相關的 id
:
$sql = "INSERT INTO iodku (name, misc)
VALUES
('Sally', 3333) -- should update
ON DUPLICATE KEY UPDATE -- `name` will trigger "duplicate key"
id = LAST_INSERT_ID(id),
misc = VALUES(misc)";
$conn->query($sql);
$id = $conn->insert_id; -- picking up existing value (2)
IODKU 執行插入和 LAST_INSERT_ID()
檢索新 id
的情況:
$sql = "INSERT INTO iodku (name, misc)
VALUES
('Dana', 789) -- Should insert
ON DUPLICATE KEY UPDATE
id = LAST_INSERT_ID(id),
misc = VALUES(misc);
$conn->query($sql);
$id = $conn->insert_id; -- picking up new value (3)
結果表內容:
SELECT * FROM iodku;
+----+--------+------+
| `id` | name | misc |
+----+--------+------+
| 1 | Leslie | 123 |
| 2 | Sally | 3333 | -- IODKU changed this
| 3 | Dana | 789 | -- IODKU added this
+----+--------+------+