L'obtention de l'ID de croissance automatique des données juste insérées est une exigence commune lors de l'utilisation de l'extension MySQLI de PHP pour les opérations de base de données. Surtout après avoir effectué l'opération d'insertion à l'aide d'une instruction de prétraitement ( MySQLI_STMT ), il est particulièrement important d'obtenir correctement la valeur de clé primaire d'auto-incrément de l'enregistrement d'insertion. Cet article introduira en détail comment obtenir avec précision cette valeur via l'attribut mysqli_stmt :: $ insert_id .
Certains champs de table (généralement les clés principaux) dans la base de données MySQL peuvent être définis pour croître automatiquement (auto_increment), et la base de données génère automatiquement un nouvel ID unique chaque fois qu'un nouvel enregistrement est inséré. Le terminal du programme doit connaître cet identifiant pour faciliter les opérations ultérieures (telles que les mises à jour, les associations, etc.).
En général, pour éviter le risque d'injection SQL, des déclarations de prétraitement sont recommandées. L'exemple de code pour l'insertion de données est le suivant:
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$username = "alice";
$email = "[email protected]";
$stmt->bind_param("ss", $username, $email);
if ($stmt->execute()) {
echo "Insérer avec succès!";
} else {
echo "L'insertion a échoué: " . $stmt->error;
}
?>
Dans cet exemple, nous insérons en toute sécurité une nouvelle donnée utilisateur via une instruction de prétraitement.
Il existe une propriété $ insert_id dans l'objet mysqli_stmt , qui peut être utilisé pour obtenir l'ID de croissance automatique généré par la dernière opération d'insertion. La méthode d'acquisition est la suivante:
<?php
$insert_id = $stmt->insert_id;
echo "Juste inséréIDOui: " . $insert_id;
?>
Notez que cette propriété n'a de sens que si l'opération d'insertion est effectuée et que le tableau a un champ de croissance automatique.
Voici un exemple complet montrant comment obtenir l'ID nouvellement inséré avec mysqli_stmt :: $ insert_id :
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
$stmt = $mysqli->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
if (!$stmt) {
die("Le prétraitement a échoué: " . $mysqli->error);
}
$username = "bob";
$email = "[email protected]";
$stmt->bind_param("ss", $username, $email);
if ($stmt->execute()) {
$insert_id = $stmt->insert_id;
echo "Insérer avec succès!Nouveau recordIDOui: " . $insert_id;
} else {
echo "L'insertion a échoué: " . $stmt->error;
}
$stmt->close();
$mysqli->close();
?>
Assurez-vous qu'il y a un champ dans le tableau qui définit Auto_increment, sinon $ insert_id renverra 0.
Chaque fois que l'exécution () est exécutée, $ insert_id est mis à jour sur l'ID actuellement inséré.
Si plusieurs enregistrements sont insérés en lots, vous ne pouvez obtenir que l'ID d'auto-incitation du premier enregistrement, et l'ID suivant doit être calculé en fonction du nombre d'insertions.
Il peut également être obtenu par $ mysqli-> insert_id (sur l'objet de connexion MySQLI où l'instruction est exécutée), mais il est recommandé d'utiliser $ stmt-> insert_id pour s'assurer que le contexte est cohérent.
Utilisez mysqli_stmt :: $ insert_id pour obtenir facilement et avec précision l'ID de croissance automatique généré par la dernière opération d'insertion. La combinaison des instructions de prétraitement peut améliorer la sécurité des données et la normativité du code. Une utilisation appropriée de cette propriété peut aider à atteindre une logique cohérente et une intégrité des données des opérations de base de données.
Étiquettes associées:
mysqli_stmt