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>-></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">// 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 .
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:
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>->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 .
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>->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 .
Lorsque vous utilisez mysqli_stmt :: $ insert_id , en plus d'assurer l'unicité, vous devez également prêter attention aux points clés suivants:
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.
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.
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.
Étiquettes associées:
mysqli_stmt