1

我正在使用此查询将数据插入两个不同的表中:

    $query1="INSERT INTO node (cid, title) VALUES('$cid','$title')";
    $query2="INSERT INTO location (nid, street, city, state) VALUES(LAST_INSERT_ID(),'$address', '$city','$state')";
    $result = FALSE;
    if (mysql_query('BEGIN')) {
        if (mysql_query($query1) &&
        mysql_query($query2))
        $result = mysql_query('COMMIT'); // both queries looked OK, save
        else
        mysql_query('ROLLBACK'); // problems with queries, no changes
    }

基本上,第一个查询将数据扔到节点表中,节点表又增加了一个 NID 字段。此 NID 用于第二个查询(我的位置表)。

现在我稍微改变了我的网站,我还想将相同的 NID 插入到第三个表中。问题是第二个查询(位置表)也有一个自动增量的 ID 列(LID),所以如果我尝试使用 last_insert_ID,它只会给我 LID 而不是 NID。

我在想我可以在事务之外进行第三次查询,在那里我将查询数据库并获取正确的 nid,但我想将其保留在事务中以防止任何混淆。有任何想法吗?

4

1 回答 1

1

该功能LAST_INSERT_ID()只保证工作一次。

最佳做法是使用SELECT LAST_INSERT_ID()或使用mysqli_insert_id(). 然后,您可以将其插入到以后的查询中而不受惩罚。

于 2012-10-22T00:05:22.287 回答