在预准备语句中获取最后插入的ID

时间:2017-11-20 20:57:09

标签: php mysql pdo

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

关注此帖Which is correct way to get last inserted id in mysqli prepared statements procedural style? 我试图将它应用于我的代码,但我仍然没有得到正确的答案。

textInput:

然后我意识到我正在使用PDO连接,所以显然mysqli函数不会工作。我继续尝试以下

   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;
        }       

但响应仍然是空的?我做错了什么?对于lastInsertId(),我应该从这里使用$ conn或$ statement:

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

2 个答案:

答案 0 :(得分:0)

您正在根据PDO正确使用lastInsertId():lastInsertId()文档

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

导致其失效的一些潜在原因:

  1. 此代码是否在TRANSACTION中?如果是这样,您需要在执行后和lastInsertId()
  2. 之前执行事务
  3. 由于INSERT IGNORE,INSERT语句可能会生成错误而不插入行,因此lastInsertId()可能为空。
  4. 希望这有帮助!

答案 1 :(得分:0)

如果您使用的是pdo,

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