我需要为每个插入操作获取最后插入的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()可能为空。
希望这可以帮助!