簡體   English   中英

更新時的mysqli-> insert_id(PHP)

[英]mysqli->insert_id on update (PHP)

它適用於任何人嗎? :P

我可以在插入時正確獲取insert_id,但不能在更新時獲取。 當然contactsId列是AUTO_INCREMENT。

整碼:

<?php
$mysqli = new mysqli('localhost', [USER], [PASSWORD], [DB]);
$mysqli->set_charset("utf8");

$query = 'INSERT INTO contacts (contactsName) VALUES ("Mariola")';
$result = $mysqli->query($query);
echo $mysqli->insert_id . '<br />';

$query = 'UPDATE contacts SET contactsName = "Mariola" WHERE contactsId = 289';
$result = $mysqli->query($query);
echo $mysqli->insert_id;

輸出:

1514
0

我有id 289的記錄,並且更新工作正常。

文檔中非常清楚地描述了這種行為。

mysqli :: $ insert_id - mysqli_insert_id - 返回上次查詢中使用的自動生成的id

如果最后一個查詢不是INSERT或UPDATE語句,或者如果修改后的表沒有具有AUTO_INCREMENT屬性的列,則此函數將返回零

來自LAST_INSERT_ID() MySQL文檔:


如果expr作為LAST_INSERT_ID()的參數給出,則該函數返回該參數的值,並將其記為LAST_INSERT_ID()返回的下一個值。 這可以用來模擬序列:

創建一個表來保存序列計數器並初始化它:

mysql> CREATE TABLE sequence (id INT NOT NULL);
mysql> INSERT INTO sequence VALUES (0);

使用該表生成如下序列號:

mysql> UPDATE sequence SET id=LAST_INSERT_ID(id+1);
mysql> SELECT LAST_INSERT_ID();

UPDATE語句遞增序列計數器並導致下一次調用LAST_INSERT_ID()以返回更新的值。 SELECT語句檢索該值。 mysql_insert_id() C API函數也可用於獲取值。 請參見第20.6.7.37節“ mysql_insert_id() ”。


也許這樣的事情會起作用:

$query = 'UPDATE contacts SET id = LAST_INSERT_ID(id), contactsName = "Mariola" WHERE contactsId = 289';

暫無
暫無

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

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