php - tabla - obtener ultimo id insertado mysql java
¿Cómo obtengo el último ID insertado de una tabla MySQL en PHP? (22)
$ lastid = mysql_insert_id ();
Tengo una tabla en la que los datos nuevos se insertan con frecuencia. Necesito obtener la última identificación de la mesa. ¿Cómo puedo hacer esto?
¿Es similar a SELECT MAX(id) FROM table
?
Al MySQLi
transacción MySQLi
, a veces no pude obtener mysqli::$insert_id
, porque devolvió 0. Especialmente si estaba usando procedimientos almacenados, eso es ejecutar INSERT
s. Entonces, hay otra forma de 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;
}
?>
Con PDO::lastInsertId :
$pdo->lastInsertId();
Con mysqli::$insert_id :
$mysqli->insert_id;
Por favor, no use las funciones mysql_*
en el nuevo código . Ya no se mantienen y están oficialmente desaprobados . Ver el cuadro rojo ? En su lugar, 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 .
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
Está bien usar mysql_insert_id()
, pero hay una nota específica sobre su uso, debe llamarlo después de ejecutar la consulta INSERT, significa en la misma sesión de script. Si lo usa de lo contrario, no funcionaría correctamente.
Está bien. También puedes usar LAST_INSERT_ID()
Limpio y simple -
$selectquery="SELECT id FROM tableName ORDER BY id DESC LIMIT 1";
$result = $mysqli->query($selectquery);
$row = $result->fetch_assoc();
echo $row[''id''];
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. Trabajó para mí al menos.
Lo que escribiste te proporcionaría la id
más grande, suponiendo que fuera única y se autoincrementara, lo cual estaría bien asumiendo que estás de acuerdo en invitar a problemas de concurrencia.
Dado que está utilizando MySQL como su base de datos, existe la 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
.
NOTA: si realiza 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 haces:
insert into xyz (name) values(''one''),(''two''),(''three'');
Mysqli :: insert_id será 1, no 3.
Para obtener el valor correcto hazlo:
mysqli::insert_id + mysqli::affected_rows) - 1
Esto ha sido documentado, pero es un poco oscuro.
Para obtener la última identificación insertada en codeigniter Después de ejecutar la consulta de inserción simplemente 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();
Por favor use PDP y luego intente esto
$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();
Por toda esta discusión, supongo que la razón para verificar la identificación máxima es saber qué id debe ser siguiente ... (si mi ID máxima es 5, la siguiente será 5 + 1 = 6).
>> Si esta no es la razón, mis mejores disculpas
Si otra persona inserta información entre su CHECK e INSERT, le daría una identificación incorrecta.
Por lo tanto, se puede resolver si crea hash que podría incluir la 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 ID si tiene seleccionado AUTO_INCRECEMENT.
Luego, en la misma función, aún tendrías tu hash y podrías buscar el id con el mismo hash. Y luego puede completar los valores vacíos con mysql UPDATE.
Esto incluye un poco más de conexiones, pero todavía es una forma de hacerlo ...
Buena suerte resolviéndolo
Prefiero usar una sintaxis pura de MySQL para obtener la última identificación auto_increment de la tabla que quiero.
php mysql_insert_id () y mysql last_insert_id () dan solo la última identificación de transacción.
Si desea el último ID autoincrementado 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.
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 en la función php incorporada mysql_insert_id();
$id = mysql_insert_id();
usted también obtiene la última identificación por
$id = last_insert_id();
Si está utilizando PDO, use PDO::lastInsertId
.
Si está utilizando Mysqli, use mysqli::$insert_id
.
Si todavía estás usando Mysql:
Por favor, no use las funciones
mysql_*
en el nuevo código . Ya no se mantienen y están oficialmente desaprobados . Ver el cuadro rojo ? En su lugar, 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
.
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) desde 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 datos obtenidos como su requisito
Usa mysqli como mysql es depricating
<?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();
?>
Use la función mysql_insert_id .
Ver pregunta similar here
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 generar problemas si tu código se usa al mismo tiempo en dos sesiones diferentes.
Esa función se llama mysql_insert_id
mysql_query("INSERT INTO mytable (product) values (''kossu'')");
printf("Last inserted record has id %d/n", ***mysql_insert_id()***);