簡體   English   中英

在准備好的語句中獲取最后插入的 ID

[英]Get last inserted ID in prepared statement

我需要為每個插入操作獲取最后插入的 ID 並將其放入數組,我想看看正確的做法是什么。

遵循這篇文章在mysqli准備好的語句程序樣式中獲取最后插入的id的正確方法是什么? 我試圖將它應用到我的代碼中,但我仍然沒有得到正確的響應。

   if($data->edit_flag == 'ADDED')
        {

            $rowdata[0] =   $data->location_name;  
            $rowdata[1] =   0;  
            $rowdata[2] =   $data->store_id;

            $query = "INSERT IGNORE INTO store_locations (location_name,total_items, store_id) VALUES (?,?,?)";

            $statement = $conn->prepare($query);
            $statement->execute($rowdata);
            $id = mysqli_stmt_insert_id($statement);
            echo "inserted id: " . $id;
        }       

然后我意識到我使用的是 PDO 連接,所以很明顯 mysqli 函數不起作用。 我繼續嘗試以下方法

$id = $conn->lastInsertId();
echo "insert id: " . $id;

但響應仍然是空的? 我做錯了什么? 對於 lastInsertId(),我應該從這里使用 $conn 還是 $statement:

$statement = $conn->prepare($query);
$statement->execute($rowdata);

您正在根據 PDO:lastInsertId() 文檔正確使用 lastInsertId()

        $statement = $conn->prepare($query);
        $statement->execute($rowdata);
        $id = $conn->lastInsertId();

它不起作用的一些潛在原因:

  1. 此代碼是否在 TRANSACTION 中? 如果是這樣,您需要在執行之后和 lastInsertId() 之前提交事務
  2. 由於您 INSERT IGNORE 有可能 INSERT 語句生成錯誤而不插入行,因此 lastInsertId() 可能為空。

希望這可以幫助!

如果您使用的是 pdo,

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

暫無
暫無

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

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