Pourquoi je ne peux pas récupérer le dernier ID inséré en PHP et MySQL?
J'ai une fonction qui crée un cours. Je suis en train de récupérer le Dernier ID inséré mais ça ne fonctionne pas:
public function createCourse()
{
require "/mysqli_connect.php";
$course_q = "INSERT INTO course (....) VALUES (.....)";
$course_r = mysqli_query($mysqli, $course_q);
$course_n = mysqli_affected_rows($mysqli);
if($course_n == 1)
{
mysqli_close($mysqli);
return true;
}
mysqli_close($mysqli);
return false;
}
C'est la fonction pour récupérer le dernier ID inséré que j'ai créé dans la même classe que la fonction createCourse:
public function getLastInsertID()
{
require "/../mysqli_connect.php";
$course_q= "SELECT LAST_INSERT_ID()";
$course_r = mysqli_query($mysqli, $course_q);
$course_n = mysqli_num_rows($course_r);
//var_dump($course_n);
if($course_n)
{
$c = mysqli_fetch_assoc($course_r);
mysqli_close($mysqli);
return $c;
}
mysqli_close($mysqli);
return NULL;
}
C'est comme ça que j'appelle les fonctions:
require "/mysqli_connect.php";
$course = new Course();
$c = $course->createCourse();
$id = $course->getLastInsertID();
var_dump($id);
"$id"
est toujours "int(0)"
J'ai aussi essayé:
require "/mysqli_connect.php";
$course = new Course();
$c = $course->createCourse();
**$id = mysqli_insert_id($mysqli);**
et j'ai aussi essayé:
$course_q= "SELECT LAST_INSERT_ID() from course";
mais qui ne fonctionne pas aussi bien. Pouvez-vous les gars voir quel est le problème? 🙁 La fonction createCourse lui-même est très bien. Il crée ce que j'ai besoin, et c'est là, dans la base de données mais je ne peux pas récupérer le dernier id inséré.
- faire un
var_dump($mysqli)
et de poster ici - Vous fermez la ressource de résultat de mysql avant de pouvoir être utilisé pour getLastInsertID, c'est peut-être la cause.
- Je pense que votre lien vers mysqli est nul..
- A l'un des messages de réponse à votre question? Si oui, pourriez-vous accepter pour les futurs visiteurs de prestations? Merci! (Voir Comment puis-je poser une question ici?.)
Vous devez vous connecter pour publier un commentaire.
Bien que la bonne façon de récupérer l'insert id avec MySQLi est d'utiliser
mysqli_insert_id()
, puisque vous êtes en train de faire une associatif fetch, vous auriez besoin d'un alias de colonne pour laLAST_INSERT_ID()
Cependant, ce n'est pas d'aller travailler parce que vous avez déjà fermé la connexion avec
mysqli_close()
dans votrecreateCourse()
fonction. Au lieu de cela, obtenir l'insert id à l'intérieurcreateCourse()
et de le retourner.Classes de conception pour utiliser une connexion commune:
La classe reçoit une connexion dans son constructeur.
Comprennent la connexion en une seule fois sur le contrôle de script
Le problème est que vous avez plusieurs connexions à la base de données, et le dernier ID inséré est l'objet d'un suivi par connexion.
Remarque: Vous devriez pas se connecter à la même base de données chaque fois que vous exécutez une requête. Il suffit de connecter au début du script, et de fermer à la fin. Connecter et déconnecter constamment à cause de votre script à exécuter très lentement, surtout avec plus de requêtes.
Aussi, le dernier ID inséré est disponible via MySQLi est
mysqli_insert_id()
fonction.Plus probable parce que vous êtes à la fermeture de la connexion mysqli à la fin de
createCourse()
.Soit ne pas faire
createCourse()
responsable de la fermeture de la connexion (le déplacer ailleurs) ou ontcreateCourse()
retour de l'insert ID sur le succès (oufalse
en cas d'échec)