1

このクエリを使用して、2つの異なるテーブルにデータを挿入しています。

    $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は、2番目のクエリ(私のロケーションテーブル)で使用されます。

Webサイトを少し変更し、同じNIDを3番目のテーブルに挿入したいと思います。問題は、2番目のクエリ(ロケーションテーブル)にもauto_incrementsのID列(LID)があるため、last_insert_IDを使用しようとすると、NIDではなくLIDが表示されるだけです。

トランザクションの外部で3番目のクエリを実行して、データベースにクエリを実行し、正しいnidを取得できると考えていましたが、混乱を防ぐために、トランザクション内に保持したいと考えています。何か案は?

4

1 に答える 1

1

この機能LAST_INSERT_ID()は1回だけ動作することが保証されています。

SELECT LAST_INSERT_ID()ベストプラクティスは、を使用するか、を使用して、必要なクエリの直後にこの値をコードに取り込むことですmysqli_insert_id()。その後、免責で後のクエリに挿入できます。

于 2012-10-22T00:05:22.287 に答える