Tengo una tabla en la que se insertan con frecuencia nuevos datos. Necesito obtener la última identificación de la tabla. ¿Cómo puedo hacer esto?
¿Es similar a SELECT MAX(id) FROM table
?
Tengo una tabla en la que se insertan con frecuencia nuevos datos. Necesito obtener la última identificación de la tabla. ¿Cómo puedo hacer esto?
¿Es similar a SELECT MAX(id) FROM table
?
INSERT
consulta y MAX(id)
, es posible que obtengas una identificación que no sea tu última identificación.
Respuestas:
Si está usando PDO, use PDO::lastInsertId
.
Si está usando Mysqli, use mysqli::$insert_id
.
Si todavía está usando Mysql:
Por favor, no use
mysql_*
funciones en código nuevo . Ya no se mantienen y están oficialmente en desuso . ¿Ves el cuadro rojo ? En sulugar,aprenda sobre declaraciones preparadas y use PDO o MySQLi ; este artículo lo ayudará a decidir cuál. Si elige PDO, aquí hay un buen tutorial .
Pero si es necesario, use mysql_insert_id
.
mysql_insert_id
justo después de su mysql_query
. Si, por supuesto, ejecuta varias otras consultas en la misma conexión en el medio, bueno, no hay nada que pueda ayudarlo allí.
PDO
parcialidad que vemos en todas partes? Veamos nuevamente la comparación de características . Está claro que mysqli
es el ganador cuando necesitas ensuciarte las manos con cosas de bajo nivel. En otras palabras, incluso si uno elige PDO, eventualmente necesitará usarlo de mysqli
todos modos.
hay una función para saber cuál fue la última identificación insertada en la conexión actual
mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();
además, usar max es una mala idea porque podría ocasionar problemas si su código se usa al mismo tiempo en dos sesiones diferentes.
Esa función se llama mysql_insert_id
Está bien. También puede usar LAST_INSERT_ID ()
select max(id)from table
está bien?
Con DOP :
$pdo->lastInsertId();
Con Mysqli :
$mysqli->insert_id;
Por favor, no use mysql_*
funciones en código nuevo . Ya no se mantienen y están oficialmente en desuso . ¿Ves el cuadro rojo ? En sulugar,aprenda sobre declaraciones preparadas y use PDO o MySQLi ; este artículo lo ayudará a decidir cuál. Si elige PDO, aquí hay un buen tutorial .
Lo que escribiste te daría lo mejor id
asumiendo que fueran únicos y autoincrementados, eso estaría bien asumiendo que estás de acuerdo con invitar a problemas de concurrencia.
Dado que está utilizando MySQL como su base de datos, existe una función específica LAST_INSERT_ID()
que solo funciona en la conexión actual que hizo la inserción.
PHP ofrece una función específica para eso también llamado mysql_insert_id
.
Prueba esto debería funcionar bien:
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$query = "INSERT blah blah blah...";
$result = mysqli_query($link, $query);
echo mysqli_insert_id($link);
Puede obtener la última identificación insertada mediante la función php incorporada mysql_insert_id();
$id = mysql_insert_id();
también obtienes la última identificación por
$id = last_insert_id();
Para obtener la última identificación insertada en codeigniter Después de ejecutar la consulta de inserción, solo use una función llamada insert_id()
en la base de datos, devolverá la última identificación insertada
Ex:
$this->db->insert('mytable',$data);
echo $this->db->insert_id(); //returns last inserted id
en una línea
echo $this->db->insert('mytable',$data)->insert_id();
Está bien usarlo mysql_insert_id()
, pero hay una nota específica sobre su uso, debe llamarlo después de ejecutar la consulta INSERT, es decir, en la misma sesión de script. Si lo usa, de lo contrario, no funcionaría correctamente.
NOTA: si hace varias inserciones con una declaración, mysqli :: insert_id no será correcto.
La mesa:
create table xyz (id int(11) auto_increment, name varchar(255), primary key(id));
Ahora si lo hace:
insert into xyz (name) values('one'),('two'),('three');
El mysqli :: insert_id será 1, no 3.
Para obtener el valor correcto, haga lo siguiente:
mysqli::insert_id + mysqli::affected_rows) - 1
Esto ha sido un documento, pero es un poco oscuro.
Prefiero usar una sintaxis MySQL pura para obtener la última identificación de auto_increment de la tabla que quiero.
php mysql_insert_id () y mysql last_insert_id () dan solo el ID de la última transacción.
Si desea el último ID auto_incrementado de cualquier tabla en su esquema (no solo la última transacción uno), puede usar esta consulta
SELECT AUTO_INCREMENT FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'my_database'
AND TABLE_NAME = 'my_table_name';
Eso es.
Es triste no ver ninguna respuesta con un ejemplo.
Usando 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
Usando PDO :: lastInsertId :
$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$database->query($sql);
$last_inserted_id=$database->lastInsertId(); // returns last ID
Usando la MySQLi
transacción que a veces no pude obtener mysqli::$insert_id
, porque devolvió 0. Especialmente si estaba usando procedimientos almacenados, que ejecutando INSERT
s. Entonces hay otra forma dentro de la transacción:
<?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;
}
?>
Use mysqli ya que mysql está depricando
<?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();
?>
Lo intenté
mysqli_insert_id ($ dbConnectionObj)
Esto devuelve la última identificación insertada de la conexión actual, por lo que si está administrando sus conexiones correctamente, esto debería funcionar. Funcionó para mí al menos.
Por toda esta discusión, supongo que la razón para verificar la identificación máxima es saber qué identificación debería ser la siguiente ... (si mi identificación máxima es 5, la siguiente será 5 + 1 = 6).
>> Si este no es el motivo, mis mejores disculpas
Caso si alguien más INSERTA información entre su CHECK e INSERT le daría una identificación incorrecta.
Por lo tanto, se puede resolver si crea un hash que podría incluir una marca de tiempo u otro valor único.
Luego, en la misma función, puede insertar su información con valores vacíos y su hash. Eso crearía una identificación si tiene AUTO_INCRECEMENT seleccionado.
Luego, en la misma función, todavía tendría su hash y podría buscar una identificación con el mismo hash. Y luego podría completar el llenado de valores vacíos con mysql UPDATE.
Esto incluye un poco más de conexiones, pero sigue siendo una forma de hacerlo ...
Buena suerte resolviéndolo.
Si su tabla tiene una columna AUTO INCREMENT como UserID, Emp_ID, .. entonces puede usar esta consulta para obtener el último registro insertado SELECT * FROM table_name donde UserID = (seleccione MAX (UserID) de table_name) En código 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);
Entonces puede usar los datos obtenidos como requisito
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", ***mysql_insert_id()***);