mysqli_stmt :: $ insert_idは、 php mysqli拡張機能によって提供されるプロパティです。挿入操作でステートメントを実行した後、レコードに挿入されたばかりのAuto_increment値を返します。この値は通常、一意の識別子を生成するための基礎として使用されます。 $ insert_idは、挿入ステートメントを実行した後にのみ有効であることに注意してください。
たとえば、自己成長したフィールド注文_IDを備えた注文テーブルがあるとします。これは、注文の一意の識別子を保存するために使用されます。新しい注文が挿入されると、 $ insert_idはその注文のorder_idを返します。
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO orders (product_name, quantity, price) VALUES (?, ?, ?)"</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"sid"</span></span><span>, </span><span><span class="hljs-variable">$product_name</span></span><span>, </span><span><span class="hljs-variable">$quantity</span></span><span>, </span><span><span class="hljs-variable">$price</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span><span><span class="hljs-variable">$order_id</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>->insert_id; </span><span><span class="hljs-comment">// 新しく挿入された注文を取得しますID</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"新しい注文ID: "</span></span><span> . </span><span><span class="hljs-variable">$order_id</span></span><span>;
</span></span>
上記のコードスニペットでは、注文を挿入するための操作を実行し、 $ stmt-> insert_idに挿入された順序のOrder_idを取得しました。
Auto_increment値自体は整数タイプの一意の識別子ですが、この識別子をより読みやすくするか、タイムスタンプ、製品カテゴリ、その他の情報などの特定のビジネスニーズを満たすことを望んでいる場合があります。この時点で、 INSERT_IDを組み合わせて、より多くのビジネス指向の注文番号またはその他の一意の識別子を生成できます。
注文番号を生成する一般的な方法は次のとおりです。
INSERT_IDと現在のタイムスタンプを組み合わせて、より一意の注文番号を生成できます。このようにして、一意性を確保することに加えて、注文番号には時間情報を含めることができます。
<span><span><span class="hljs-variable">$order_id</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>->insert_id;
</span><span><span class="hljs-variable">$timestamp</span></span><span> = </span><span><span class="hljs-title function_ invoke__">date</span></span><span>(</span><span><span class="hljs-string">"YmdHis"</span></span><span>); </span><span><span class="hljs-comment">// 現在のタイムスタンプ,形式:年、月、日、時間、分、秒</span></span><span>
</span><span><span class="hljs-variable">$unique_order_id</span></span><span> = </span><span><span class="hljs-string">"ORD"</span></span><span> . </span><span><span class="hljs-variable">$timestamp</span></span><span> . </span><span><span class="hljs-title function_ invoke__">str_pad</span></span><span>(</span><span><span class="hljs-variable">$order_id</span></span><span>, </span><span><span class="hljs-number">5</span></span><span>, </span><span><span class="hljs-string">'0'</span></span><span>, STR_PAD_LEFT);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"生成された注文番号: "</span></span><span> . </span><span><span class="hljs-variable">$unique_order_id</span></span><span>;
</span></span>
この例では、注文番号形式はORD20230714153001234であり、 20230714153001は現在の時刻で、 234はINSERT_IDから取得した一意の注文IDです。
注文番号をアプリケーションシナリオの製品カテゴリに関連付ける必要がある場合、製品情報とINSERT_IDを組み合わせることで注文番号を生成できます。たとえば、eコマースプラットフォームでは、注文番号のプレフィックスを製品カテゴリのコードに設定することをお勧めします。
<span><span><span class="hljs-variable">$product_category_code</span></span><span> = </span><span><span class="hljs-string">"ELEC"</span></span><span>; </span><span><span class="hljs-comment">// 電気製品を想定します</span></span><span>
</span><span><span class="hljs-variable">$order_id</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>->insert_id;
</span><span><span class="hljs-variable">$unique_order_id</span></span><span> = </span><span><span class="hljs-variable">$product_category_code</span></span><span> . </span><span><span class="hljs-string">"-"</span></span><span> . </span><span><span class="hljs-title function_ invoke__">str_pad</span></span><span>(</span><span><span class="hljs-variable">$order_id</span></span><span>, </span><span><span class="hljs-number">6</span></span><span>, </span><span><span class="hljs-string">'0'</span></span><span>, STR_PAD_LEFT);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"生成された注文番号: "</span></span><span> . </span><span><span class="hljs-variable">$unique_order_id</span></span><span>;
</span></span>
この方法で生成される順序番号は、 Elec-000023である場合があります。ここでは、 Elecは製品カテゴリを表し、 000023はInsert_Idに基づいて生成される一意の識別子です。
mysqli_stmt :: $ insert_idを使用する場合、一意性を確保することに加えて、次のキーポイントにも注意を払う必要があります。
トランザクションを使用した場合、 INSERT_IDは、トランザクションで最後に正常に挿入されたレコードのIDを返す場合があるため、トランザクションに複数の挿入ステートメントが含まれている場合は、正しい場所で$ INSTER_IDを使用してください。トランザクションがロールバックされた場合、 insert_idの値もリセットされます。
INSERT_IDで一意の識別子を生成できますが、場合によっては、識別子の予測不可能性を確保する必要がある場合があります。たとえば、純粋に数値型識別子を注文番号として使用して、悪意を持って推測されるリスクを減らすことを避けてください。日付、タイムスタンプ、その他の方法を組み合わせることで、識別子の複雑さとセキュリティを高めることができます。
データベーステーブルのAuto_increment値が手動でリセットされている場合(たとえば、 Alter Table操作は管理者によって実行されました)、 INSERT_IDの値がリセットまたは複製される場合があります。したがって、テーブルを健康に保ち、不必要な操作を避けることが非常に重要です。
関連タグ:
mysqli_stmt