J'ai une table dans laquelle de nouvelles données sont fréquemment insérées. J'ai besoin de la toute dernière pièce d'identité de la table. Comment puis-je faire ceci?
Est-ce similaire à SELECT MAX(id) FROM table?
J'ai une table dans laquelle de nouvelles données sont fréquemment insérées. J'ai besoin de la toute dernière pièce d'identité de la table. Comment puis-je faire ceci?
Est-ce similaire à SELECT MAX(id) FROM table?
INSERTet votre requête pour MAX(id), vous pouvez obtenir un identifiant qui n'est pas votre dernier identifiant.
Réponses:
Si vous utilisez PDO, utilisez PDO::lastInsertId.
Si vous utilisez Mysqli, utilisez mysqli::$insert_id.
Si vous utilisez toujours Mysql:
Veuillez ne pas utiliser de
mysql_*fonctions dans le nouveau code . Ils ne sont plus maintenus et sont officiellement obsolètes . Vous voyez la boîte rouge ? Renseignez-vousplutôtsur les instructions préparées et utilisez PDO ou MySQLi - cet article vous aidera à décider lesquelles. Si vous choisissez PDO, voici un bon tutoriel .
Mais si vous devez, utilisez mysql_insert_id.
mysql_insert_id juste après votre mysql_query. Si, bien sûr, vous exécutez plusieurs autres requêtes sur la même connexion entre les deux, rien ne peut vous y aider.
PDObiais que l'on voit partout? Regardons à nouveau la comparaison des fonctionnalités . Il est clair que mysqlic'est le gagnant lorsque vous devez vous salir les mains avec des trucs de bas niveau. En d'autres termes, même si l'on choisit l'AOP, il devra éventuellement l'utiliser de mysqlitoute façon.
il y a une fonction pour savoir quel était le dernier identifiant inséré dans la connexion actuelle
mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();
De plus, l'utilisation de max est une mauvaise idée car cela pourrait entraîner des problèmes si votre code est utilisé en même temps dans deux sessions différentes.
Cette fonction s'appelle mysql_insert_id
C'est bon. Vous pouvez également utiliser LAST_INSERT_ID ()
select max(id)from tablec'est OK?
Avec AOP :
$pdo->lastInsertId();
Avec Mysqli :
$mysqli->insert_id;
Veuillez ne pas utiliser de mysql_*fonctions dans le nouveau code . Ils ne sont plus maintenus et sont officiellement obsolètes . Vous voyez la boîte rouge ? Renseignez-vousplutôtsur les instructions préparées et utilisez PDO ou MySQLi - cet article vous aidera à décider lesquelles. Si vous choisissez PDO, voici un bon tutoriel .
Ce que vous avez écrit vous obtiendrait le meilleur en idsupposant qu'ils étaient uniques et auto-incrémentés, ce qui serait bien en supposant que vous êtes d'accord pour inviter des problèmes de concurrence.
Puisque vous utilisez MySQL comme base de données, il existe une fonction spécifique LAST_INSERT_ID()qui ne fonctionne que sur la connexion actuelle qui a effectué l'insertion.
PHP propose une fonction spécifique pour cela aussi appelée mysql_insert_id.
Essayez ceci devrait fonctionner correctement:
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$query = "INSERT blah blah blah...";
$result = mysqli_query($link, $query);
echo mysqli_insert_id($link);
Vous pouvez obtenir le dernier identifiant inséré par la fonction php intégrée mysql_insert_id();
$id = mysql_insert_id();
vous pouvez également obtenir le dernier identifiant par
$id = last_insert_id();
Pour obtenir le dernier identifiant inséré dans codeigniter Après avoir exécuté la requête d'insertion, utilisez simplement une fonction appelée insert_id()sur la base de données, elle retournera le dernier identifiant inséré
Ex:
$this->db->insert('mytable',$data);
echo $this->db->insert_id(); //returns last inserted id
en une ligne
echo $this->db->insert('mytable',$data)->insert_id();
C'est correct à utiliser mysql_insert_id(), mais il y a une note spécifique sur son utilisation, vous devez l'appeler après l'exécution de la requête INSERT, c'est-à-dire dans la même session de script. Si vous l'utilisez autrement, cela ne fonctionnerait pas correctement.
REMARQUE: si vous faites plusieurs insertions avec une seule instruction mysqli :: insert_id ne sera pas correcte.
La table:
create table xyz (id int(11) auto_increment, name varchar(255), primary key(id));
Maintenant si vous faites:
insert into xyz (name) values('one'),('two'),('three');
Le mysqli :: insert_id sera 1 et non 3.
Pour obtenir la valeur correcte, procédez comme suit:
mysqli::insert_id + mysqli::affected_rows) - 1
Cela a été documenté mais c'est un peu obscur.
Je préfère utiliser une pure syntaxe MySQL pour obtenir le dernier identifiant auto_increment de la table que je veux.
php mysql_insert_id () et mysql last_insert_id () ne donnent que le dernier ID de transaction.
Si vous voulez le dernier ID auto_incrémenté de n'importe quelle table de votre schéma (pas seulement la dernière transaction), vous pouvez utiliser cette requête
SELECT AUTO_INCREMENT FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database'
AND TABLE_NAME = 'my_table_name';
C'est tout.
C'est triste de ne voir aucune réponse avec un exemple.
Utilisation de Mysqli :: $ insert_id :
$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$mysqli->query($sql);
$last_inserted_id=$mysqli->insert_id; // returns last ID
Utilisation de PDO :: lastInsertId :
$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$database->query($sql);
$last_inserted_id=$database->lastInsertId(); // returns last ID
En utilisant la MySQLitransaction, je n'ai parfois pas pu obtenir mysqli::$insert_id, car elle retournait 0. Surtout si j'utilisais des procédures stockées, qui exécutaient INSERTs. Il existe donc un autre moyen dans la transaction:
<?php
function getInsertId(mysqli &$instance, $enforceQuery = false){
if(!$enforceQuery)return $instance->insert_id;
$result = $instance->query('SELECT LAST_INSERT_ID();');
if($instance->errno)return false;
list($buffer) = $result->fetch_row();
$result->free();
unset($result);
return $buffer;
}
?>
Utilisez mysqli car mysql est dépréciant
<?php
$mysqli = new mysqli("localhost", "yourUsername", "yourPassword", "yourDB");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// Conside employee table with id,name,designation
$query = "INSERT INTO myCity VALUES (NULL, 'Ram', 'Developer')";
$mysqli->query($query);
printf ("New Record has id %d.\n", $mysqli->insert_id);
/* close connection */
$mysqli->close();
?>
j'ai essayé
mysqli_insert_id ($ dbConnectionObj)
Cela renvoie le dernier identifiant inséré de la connexion actuelle, donc si vous gérez correctement vos connexions, cela devrait fonctionner. A travaillé pour moi au moins.
Par toute cette discussion, je suppose que la raison de vérifier l'id max est de savoir quel id devrait être le prochain .. (si mon id max est 5 alors le suivant sera 5 + 1 = 6).
>> Si ce n'est pas la raison, mes meilleures excuses
Cas où quelqu'un d'autre INSERT des informations entre votre CHECK et INSERT vous donnerait un mauvais ID.
Il peut donc être résolu si vous créez un hachage qui pourrait inclure un horodatage ou une autre valeur unique.
Ensuite, dans la même fonction, vous pouvez insérer vos informations avec des valeurs vides et votre hachage. Cela créerait un ID si vous avez sélectionné AUTO_INCRECEMENT.
Ensuite, dans la même fonction, vous auriez toujours votre hachage et vous pourriez rechercher un identifiant avec le même hachage. Et puis vous pouvez compléter le remplissage des valeurs vides avec mysql UPDATE.
Cela inclut un peu plus de connexions, mais c'est toujours un moyen de le faire ...
Bonne chance pour le résoudre.
Si votre table a une colonne AUTO INCREMENT comme UserID, Emp_ID, .. alors vous pouvez utiliser cette requête pour obtenir le dernier enregistrement inséré SELECT * FROM table_name où UserID = (sélectionnez MAX (UserID) dans table_name) Dans le code PHP:
$con = mysqli_connect('localhost', 'userid', 'password', 'database_name');
if (!$con) {
die('Could not connect: ' . mysqli_error($con));
}
$sql = "SELECT * FROM table_name where UserID=(select MAX(UserID)from table_name)";
$result = mysqli_query($con, $sql);
Ensuite, vous pouvez utiliser les données récupérées comme exigence
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", ***mysql_insert_id()***);