1

カートテーブルに挿入したい

**orderId** | cartId | cartDate | cartStatus
____________________________________________
1           | 1      | 20120102 | complete
2           | 2      | 20120102 | complete
3           | 3      | 20120102 | complete
4           | 4      | 20120102 | complete

注文テーブルの自動インクリメント値 orderId を使用する

**orderId** | orderStatus | secret   | sauce
____________________________________________
1           | 7          | 020200202 | bbq
2           | 6          | 020200202 | bbq
3           | 6          | 020200202 | t
4           | 4          | 020200202 | m


INSERT INTO ordertable VALUES(null,7,020200202,bbq)

しかし、次に orderId を使用します (現在は 5 になります)

INSERT INTO carttable VALUES(orderId,20120102,complete)

ただし、この挿入は同じクエリとして実行する必要があります。mysql_last_id (php) を使用すると、カートの挿入が実行される前に、他の誰かがデータベースに挿入する機会があります。または、接続がタイムアウトする可能性があります。データベースは MyISAM です (これは変更できません。サードパーティのソリューションです)。

ありがとう、J

4

1 に答える 1

1

使用に関するあなたの懸念mysql_last_idは根拠がないと思います-すべての接続でグローバルに最後のIDではなく、現在の接続の最後のIDを返します。

したがって、同じデータベース接続を共有する複数のスレッドがあるか、または を呼び出す前に同じ接続で別の ID 挿入を実行しない限り、mysql_last_id心配する必要はありません。

ETA: 次のように、一度に複数のクエリを送信することでこれを行うことができます。

INSERT INTO ordertable VALUES(null,7,020200202,bbq);
INSERT INTO carttable VALUES(LAST_INSERT_ID(),20120102,complete);

しかし、それを使用しmysql_queryている場合、通常、同じ呼び出しで複数のクエリを送信することはできません (ほとんどの場合、SQL インジェクションを防止するためのセキュリティ対策として)。

于 2012-05-03T18:20:35.963 に答える