2009-12-14 11 views
2

Salut les gars j'espérais de l'aide ici, s'il vous plaît.php mysql_insert_id(); ne fonctionne pas

J'ai une requête INSERT à une table, après cela se fait, je vous appelle:

mysql_insert_id(); 

Pour envoyer le dernier ID inséré dans la table à la page suivante comme ceci:

$insertGoTo = "confirm_booking.php?booking_ID=" .$_POST['booking_ID']. ""; 

Malheureusement, cela ne fonctionne pas, tout ce que je reçois est un zéro.

La table dans laquelle j'insère a un numéro d'incrémentation automatique et des valeurs y sont insérées.

J'ai également essayé SELECT MAX(id) FROM mytable. Ce dos ne fonctionne pas non plus.

Je sais que ce problème a déjà été évoqué. J'ai lu tous les messages mais rien n'est venu utile.

Un grand merci Francesco

+0

Pouvez-vous montrer le code exact que vous utilisez? Êtes-vous sûr d'utiliser la bonne connexion à la base de données? –

+0

Merci Pekka, les commentaires de Jan ont parfaitement fonctionné. PS la connexion de base de données était bien. – frapet

Répondre

3

Vous devez utiliser la valeur retournée par mysql_insert_id() lorsque vous générez votre lien:

// your query 
$newId = MySql_Insert_Id(); 

$insertGoTo = "confirm_booking.php?booking_ID=" . $newId; 
+0

Merci Jan pour vos commentaires. Il envoie maintenant l'ID mais il ne l'obtient pas dans la page suivante. – frapet

+0

Trouvé le problème. Merci Jan vous avez sauvé ma journée! – frapet

+0

pas de problème! Heureux de vous aider. –

2

Quelques points clés du manuel PHP:

Le ID généré pour une colonne AUTO_INCREMENT par la requête précédente sur success, 0 si la requête précédente ne génère pas un AUTO_INCR EMENT value, ou FALSE si aucune connexion MySQL n'a été établie pour .

Si ne pas avoir un champ AUTO_INCREMENT est pas votre problème, vous pourriez vouloir essayer stocker le résultat de l'appel mysql_query et à l'aide que comme argument à la fonction id

$result = mysql_query("..."); 
$id = mysql_insert_id($result); 
+0

L'auto_increment a réussi et la connexion est établie. Tout est bon. – frapet

3

Il est possible que votre table n'a aucun champ AUTO_INCREMENT!

Cela peut aussi arriver parce que vous avez deux ou plusieurs connexions mysql en même temps. Dans ce cas, vous devez utiliser un link identifier.

$link = mysql_connect(...); 
mysql_select_db('mydb', $link); 
mysql_query('INSERT mytable SET abc="123"', $link); 
$inserted_id = mysql_insert_id($link); 
1

mysql_insert_id peut renvoyer 0 ou false si votre insertion échoue à droite? Donc, si vous avez des problèmes avec mysql_insert_id ne pas retounring ce que vous attendez confirmer que vous n'avez pas une contrainte unique ou un autre problème avec votre SQL qui provoquerait l'échec de l'insertion. Utiliser max est une mauvaise idée si vous considérez cela.

2

avait un problème à l'aide d'une requête comme ceci:

INSERT INTO membres (nom d'utilisateur, mot de passe, e-mail) VALUES (...)

  • raison étant que l'identifiant (qui est ma clé primaire et Auto Increment) ne fait pas partie de la requête.

Changer à:

INSERT INTO membres (id, nom d'utilisateur, mot de passe, e-mail) VALUES ('', ...)

en utilisant une valeur vide '' aura Majeures la valeur Auto Increment mais aussi vous permettre de l'utiliser dans votre requête afin que vous puissiez retourner l'insert id

+0

Astuce très utile qui mérite plus de votes. Il est assez courant d'omettre la colonne ID plutôt que de lui passer une chaîne vide lors de l'utilisation d'un incrément automatique. –

0

Assurez-vous de mettre mysql_insert_id() après la

mysql_query($sql, $con); //Execute the query 

Ci-dessus la requête responsable de l'exécution de votre commande Insert INTO .... Après vous pouvez obtenir le dernier ID inséré

+0

La question indique clairement que 'mysql_insert_id' est émis ** après ** mysql_query; –

0

J'ai également souffrir de ce problème. Enfin, j'ai trouvé que le problème se produit dans ma connexion à la base de données. Vous pouvez utiliser ce code de connexion suivant pour connecter la base de données, alors vous pouvez facilement utiliser mysqli_insert_id().

$db_connect = mysqli_connect("localhost", "root", "", "social"); 

Ensuite, vous pouvez utiliser mysqli_insert_id() comme

$id = mysqli_insert_id($db_conx); 

J'espère que cela vous aidera. Je vous ai un problème alors laissez votre commentaire.