Position actuelle: Accueil> Derniers articles> Quelles sont les meilleures pratiques pour tirer parti de MySqli_Stmt :: $ insert_id pour générer des numéros de commande ou des identifiants uniques?

Quelles sont les meilleures pratiques pour tirer parti de MySqli_Stmt :: $ insert_id pour générer des numéros de commande ou des identifiants uniques?

gitbox 2025-08-28

1. Comprendre mysqli_stmt :: $ insert_id

mysqli_stmt :: $ insert_id est une propriété fournie par l'extension PHP mysqli . Après avoir exécuté une instruction avec une opération d'insertion , il renvoie la valeur auto_increment qui vient d'être insérée dans l'enregistrement. Cette valeur est généralement utilisée comme base pour générer un identifiant unique. Notez que $ insert_id n'est valide qu'après l'exécution de l'instruction INSERT .

Par exemple, supposons que nous ayons une table de commandes avec un champ d'auto-croissance Order_ID , qui est utilisé pour stocker l'identifiant unique de la commande. Lorsqu'une nouvelle commande est insérée, $ insert_id renvoie l'Ordre_id de cette commande.

 <span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</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>-&gt;</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>-&gt;</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>-&gt;insert_id;  </span><span><span class="hljs-comment">// Obtenez la commande nouvellement inséréeID</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Nouvelle commandeID: "</span></span><span> . </span><span><span class="hljs-variable">$order_id</span></span><span>;
</span></span>

Dans l'extrait de code ci-dessus, nous avons effectué une opération pour insérer une commande et obtenu l'Ordre_id de l'ordre qui vient d'être inséré via $ stmt-> insert_id .


2. Utilisez INSERT_ID pour générer des identifiants uniques

Bien que la valeur Auto_increment elle-même soit un identifiant unique d'un type entier, nous voulons parfois que cet identifiant soit plus lisible ou répond aux besoins commerciaux spécifiques, tels que les horodatages, les catégories de produits et d'autres informations. À l'heure actuelle, nous pouvons combiner INSERT_ID pour générer des numéros de commande plus axés sur l'entreprise ou d'autres identifiants uniques.

Voici quelques façons courantes de générer un numéro de commande:

2.1 Générer le numéro de commande basé sur INSERT_ID et l'heure actuelle

Nous pouvons combiner insert_id avec l'horodatage actuel pour générer un numéro de commande plus unique. De cette façon, en plus d'assurer l'unicité, le numéro de commande peut également contenir des informations de temps, ce qui facilite la post-requête et le tri.

 <span><span><span class="hljs-variable">$order_id</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;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">// Horodatage actuel,Format:Année, mois, jour, heure, minute, deuxième</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">"Le numéro de commande généré: "</span></span><span> . </span><span><span class="hljs-variable">$unique_order_id</span></span><span>;
</span></span>

Dans cet exemple, le format de numéro de commande est ORDORD20230714153001234 , où 20230714153001 est l'heure actuelle et 234 est l'ID de commande unique obtenu à INSERT_ID .

2.2 Générer des numéros de commande en fonction de la catégorie de produits et INSERT_ID

Si le numéro de commande doit être associé à la catégorie de produit dans le scénario d'application, le numéro de commande peut être généré en combinant des informations sur le produit avec INSERT_ID . Par exemple, une plate-forme de commerce électronique peut souhaiter définir le préfixe du numéro de commande sur le code de la catégorie de produit.

 <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">// Assumer les produits électriques</span></span><span>
</span><span><span class="hljs-variable">$order_id</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;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">"Le numéro de commande généré: "</span></span><span> . </span><span><span class="hljs-variable">$unique_order_id</span></span><span>;
</span></span>

Le numéro de commande généré de cette manière peut être ELEC-000023 , où ELEC représente la catégorie de produit et 000023 est un identifiant unique généré sur la base d'insert_id .


3. Précautions et meilleures pratiques

Lorsque vous utilisez mysqli_stmt :: $ insert_id , en plus d'assurer l'unicité, vous devez également prêter attention aux points clés suivants:

3.1 L'impact des transactions

En cas d'utilisation d'une transaction, INSERT_ID peut renvoyer l'ID du dernier enregistrement inséré avec succès dans la transaction, donc si la transaction contient plusieurs instructions d'insertion , assurez-vous d'utiliser $ insert_id au bon endroit. Si la transaction est en arrière, la valeur d' Insert_id sera également réinitialisée.

3.2 Sécurité

Bien que des identifiants uniques puissent être générés par INSERT_ID , dans certains cas, il peut être nécessaire d'assurer l'imprévisibilité de l'identifiant. Par exemple, évitez d'utiliser un identifiant de type purement numérique comme numéro d'ordre pour réduire le risque d'être deviné de manière malveillante. La combinaison des dates, des horodatages et d'autres méthodes peut augmenter la complexité et la sécurité des identifiants.

3.3 Réinitialisation de la valeur auto_increment

Si la valeur Auto_increment dans la table de la base de données est réinitialisée manuellement (par exemple, l'opération de la table alter a été effectuée par l'administrateur), la valeur d' Insert_id peut être réinitialisée ou en double. Par conséquent, il est très important de garder le tableau en bonne santé et d'éviter les opérations inutiles.