我需要为每个插入操作获取最后插入的ID,并将其放入数组中,我试图查看执行此操作的正确方法。

在此帖子之后Which is correct way to get last inserted id in mysqli prepared statements procedural style?
我试图将其应用于我的代码,但仍未得到正确的响应。

   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();


无法运作的一些潜在原因:


这段代码是否在TRANSACTION中?如果是这样,则需要在执行之后和lastInsertId()之前提交事务。
由于您执行INSERT IGNORE,所以INSERT语句有可能生成错误而不插入行,因此lastInsertId()可能为空。


希望这可以帮助!

10-04 10:55