繁体   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