ページの読み込みごとに一意の ID を選択する必要があるページを作成しています。基本的には発注方式ですが、PO は UID のみとなるため、同一の ID をユーザーが取得できないようにすることが重要です。最後の ID を呼び出してから 1 を追加して送信しようとしましたが、2 人以上のユーザーが同時に入力すると競合が発生する可能性があります。ページの読み込みごとに UID をプルする最良の方法は何ですか? 解決策はありますか?
ありがとう
ロイド
PHP には次の 1 つがあります。
UniqId() は 1 つの方法ですが、大きな数になります。V Patel が言うように、「自動インクリメント」もあり、これはおそらくあなたが望むオプションです。
MySQL で、フィールド「po_id」を含むテーブル (「PurchaseOrders」など) を設定し、それを主キーと自動インクリメントに設定します。別のフィールド「po_status」(TinyInt*1) と別の「po_lastused」(Date*1) を追加します。ステータスは、0=下書き、1=最終、2=発送済みなどになります。LastUsed は、ユーザーが最後に詳細にアクセスした時刻です。
新しい注文書を作成する場合は、INSERT INTO PurchaseOrders(po_status, po_lastused) VALUES(0, NOW()); 注: 実際の発注書を指定していません
「最後の挿入 ID」を要求することで po_id を取得できます ( http://php.net/manual/en/mysqli.insert-id.php、http://php.net/manual/en/function.mysql -insert-id.php、http://www.php.net/manual/en/pdo.lastinsertid.php、コーディング ライブラリによって異なる)
セッション変数に po_id を格納して、ユーザーが戻ったときに自分の po_id がわかるようにします(*2)
ユーザーが発注書にアクセスするたびに、「最終更新」が 5 分以上前の場合、タイマーを更新します。
下書きで、最終更新日がセッションより古いすべての注文書を定期的に削除します (例: 1 日後)。
このようにして、簡単に見積もることができる素敵な注文番号が得られます。
*1 純粋主義者の場合は、ステータスに Enum を使用し、日付に int を使用することもできます。好みによって異なります。日付を自動更新するように設定することもできます。しかし、私はそれを簡単にしています。)
*2 繰り返しになりますが、純粋主義者の場合は、「他の」ユーザーが他のユーザーの注文書にアクセスできないようにするために、ここで実装できるセキュリティがさらにありますが、これで十分です。
使用中のデータベースの自動インクリメント機能を使用します。特に、数値にしたい場合や、永続化するまでは必要ない場合に使用します。