5

PHPとMySQLを使用して簡単な請求書システムを開発しています。
私の最初の考えは、請求書IDにID(自動インクリメント)を使用することでした。しかし、それは機能しません。

ユーザーが私の支払いサービスプロバイダーに注文をコミットすると、一時的な請求書が作成されます。取引が失敗した場合、一時的な請求書を削除する必要があります。

問題は、請求書が作成され、IDが付与されていることです。法律により、請求書番号が付与されている請求書を削除することは許可されていません。したがって、トランザクションが成功した後、別の列'invoice_id'を追加し、IDを追加する必要があります。

複数のユーザーが同時に購入する場合があります。

私の質問は、最後に作成された請求書IDを確実に取得して、これをインクリメントするにはどうすればよいですか?

$_SESSION[]保存にを使用する必要がありinvoice_idますか?または、DBから最新のIDを取得する必要がありますか?DBから取得する場合、このトランザクションのテーブルをロックする必要がありますか?

どんなガイダンスでも大歓迎です。

4

4 に答える 4

5

処理されていない請求書の一時テーブルを作成します。請求書が処理されたら、永続的なテーブルに移動し、mysql の AUTO_INCREMENT オプションを使用して請求書 ID を割り当てます。

これにより、未処理用と処理済み用の 2 つのテーブルが可能になります。temp -> perm からの動きを追跡するために id フィールドを配置することもできます

于 2012-07-25T11:55:46.453 に答える
2

削除するのではなく、キャンセルするだけです。通常、トランザクションが失敗した後、トレーダーは顧客に支払うように通知しますが、請求書が存在しない場合、これは不可能です。

于 2012-07-25T11:58:42.697 に答える
0

1 つのアプローチは、支払いが承認されるまで請求書をセッションに保持することです。支払いが承認されない場合、請求書はユーザーのセッションとともに消滅します。

もう 1 つの方法は、保留中の請求書用の保持テーブルを作成することです。支払いが承認されたら、データを請求書テーブルに移動するだけです。

最後のアプローチとして、先に進んで請求書テーブルに請求書を作成しますが、支払いが失敗した場合はソフト削除します。フラグを設定し、deleted = 1 にして、すべてのプロシージャに「where deleted = 0」を追加します。

于 2012-07-25T12:00:11.213 に答える
0

純粋にランダムな請求書番号を生成します。最も単純な戦略:

md5(uniqid())

それでも、未完成の請求書をデータベースに保存する方が賢明に思えます。

また、ランダム要素により、請求書番号の推測がより困難になります。

于 2012-07-25T12:01:21.747 に答える