Position actuelle: Accueil> Derniers articles> Comment obtenir l'ID du dernier enregistrement inséré via mysqli_stmt :: $ insert_id et effectuer des opérations de requête ultérieures?

Comment obtenir l'ID du dernier enregistrement inséré via mysqli_stmt :: $ insert_id et effectuer des opérations de requête ultérieures?

gitbox 2025-08-04

Lorsque vous utilisez PHP pour les opérations de base de données, en particulier après avoir inséré des données à l'aide de l'instruction de prétraitement de MySQLI ( MySQLI_STMT ), nous devons souvent obtenir l'ID de réduction automatique de l'enregistrement qui vient d'être inséré pour les opérations de requête, de mise à jour ou d'association ultérieures. Cet article présentera en détail comment obtenir le dernier ID inséré via mysqli_stmt :: $ insert_id et démontrez comment utiliser cet ID pour les requêtes ultérieures.

1. Qu'est-ce que mysqli_stmt :: $ insert_id

mysqli_stmt :: $ insert_id est un attribut de l'objet mysqli_stmt , utilisé pour obtenir l'ID de clé primaire automatique de l'enregistrement inséré via l'instruction de prétraitement. Il convient de noter que cette propriété renvoie un ID valide uniquement lorsque l'opération d'insertion est effectuée et que le champ Auto_Increment est défini dans la table de données.

2. Utilisez des exemples

Voici un exemple complet de la façon d'insérer un enregistrement et d'obtenir l'ID inséré, puis d'utiliser cet ID pour interroger les données que vous venez d'insérer.

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"test_db"</span></span><span>);

</span><span><span class="hljs-comment">// Vérifiez la connexion</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_errno) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Échec de la connexion: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;connect_error);
}

</span><span><span class="hljs-comment">// Insérer des données SQL</span></span><span>
</span><span><span class="hljs-variable">$insert_sql</span></span><span> = </span><span><span class="hljs-string">"INSERT INTO users (username, email) VALUES (?, ?)"</span></span><span>;
</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-variable">$insert_sql</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$stmt</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Le prétraitement a échoué: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error);
}

</span><span><span class="hljs-comment">// Lier les paramètres et effectuer l&#39;insertion</span></span><span>
</span><span><span class="hljs-variable">$username</span></span><span> = </span><span><span class="hljs-string">'john_doe'</span></span><span>;
</span><span><span class="hljs-variable">$email</span></span><span> = </span><span><span class="hljs-string">'[email protected]'</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">"ss"</span></span><span>, </span><span><span class="hljs-variable">$username</span></span><span>, </span><span><span class="hljs-variable">$email</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-comment">// Obtenez l&#39;insertion ID</span></span><span>
</span><span><span class="hljs-variable">$inserted_id</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;insert_id;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Insérer avec succès,ID pour: "</span></span><span> . </span><span><span class="hljs-variable">$inserted_id</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;

</span><span><span class="hljs-comment">// Fermez la déclaration d&#39;insertion</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();

</span><span><span class="hljs-comment">// Utiliser l&#39;insert ID Effectuer une requête</span></span><span>
</span><span><span class="hljs-variable">$select_sql</span></span><span> = </span><span><span class="hljs-string">"SELECT * FROM users WHERE id = ?"</span></span><span>;
</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-variable">$select_sql</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$stmt</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"查询语句Le prétraitement a échoué: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;error);
}

</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">"i"</span></span><span>, </span><span><span class="hljs-variable">$inserted_id</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">$result</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">get_result</span></span><span>();

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$row</span></span><span> = </span><span><span class="hljs-variable">$result</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">fetch_assoc</span></span><span>()) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Résultats de la requête:\n"</span></span><span>;
    </span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$row</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Aucun enregistrement correspondant trouvé。\n"</span></span><span>;
}

</span><span><span class="hljs-comment">// Fermez la ressource</span></span><span>
</span><span><span class="hljs-variable">$stmt</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-variable">$mysqli</span></span><span>-&gt;</span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

3. Choses à noter

  1. Assurez-vous que vous utilisez la même connexion de la base de données <br> Si l'insert et la requête utilisent différentes connexions, INSERT_ID ne reflétera pas correctement l'ID inséré.

  2. Le tableau doit contenir le champ Auto_inCment <br> Sinon, INSERT_ID ne renverra pas de valeur valide même si l'insert réussit.

  3. insert_id est une propriété d'un objet instruction, pas un objet de connexion <br> Utilisez le $ stmt après la préparation pour obtenir $ stmt-> insert_id , sinon $ mysqli-> insert_id doit être utilisé.

Iv. Scénarios d'application

  • Obtenez l'ID de clé principale après avoir inséré les commandes, les utilisateurs, les articles, etc. pour établir une association un-à plusieurs ou plusieurs à plusieurs.

  • Implémentez les opérations automatiques de saut ou de rétroaction après que l'utilisateur a soumis des données.

  • Un identifiant unique pour l'enregistrement des opérations entraîne un système de journal ou d'audit.

5. Résumé

Grâce à mysqli_stmt :: $ insert_id , nous pouvons facilement obtenir le dernier ID d'enregistrement inséré, implémentant ainsi la logique de fonctionnement des données plus complexe. Dans le développement réel, cette méthode permet d'assurer la précision et la cohérence des données, et est également un moyen recommandé d'utiliser MySQLI pour les opérations de base de données sécurisées.