ultimo saber registro obtener net last_insert_id inserto insertado despues php mysql

saber - php mysql get insert id



Fila de inserciĆ³n de PHP/MySQL luego obtener ''id'' (9)

El campo ''id'' de mi tabla aumenta automáticamente cuando inserto una fila. Quiero insertar una fila y luego obtener esa ID.

Lo haría tal como lo dije, pero ¿hay alguna manera de hacerlo sin preocuparme por el tiempo entre insertar la fila y obtener la identificación?

Sé que puedo consultar la base de datos para la fila que coincide con la información que se ingresó, pero hay un gran cambio habrá duplicados, con la única diferencia es el ID.


Como dijo @NaturalBornCamper, mysql_insert_id ahora está en desuso y no debe usarse. Las opciones ahora son usar PDO o mysqli. NaturalBornCamper explicó PDO en su respuesta, así que mostraré cómo hacerlo con MySQLi ( MySQL mejorado ) usando mysqli_insert_id .

// First, connect to your database with the usual info... $db = new mysqli($hostname, $username, $password, $databaseName); // Let''s assume we have a table called ''people'' which has a column // called ''people_id'' which is the PK and is auto-incremented... $db->query("INSERT INTO people (people_name) VALUES (''Mr. X'')"); // We''ve now entered in a new row, which has automatically been // given a new people_id. We can get it simply with: $lastInsertedPeopleId = $db->insert_id; // OR $lastInsertedPeopleId = mysqli_insert_id($db);

Consulte la documentación de PHP para obtener más ejemplos: mysqli_insert_id


En cuanto al sitio web de PHP, mysql_insert_id ahora está en desuso y debemos usar PDO. Para hacer esto con PDO, proceda de la siguiente manera:

$db = new PDO(''mysql:dbname=database;host=localhost'', ''user'', ''pass''); $statement = $db->prepare(''INSERT INTO people(name, city) VALUES(:name, :city)''); $statement->execute( array('':name'' => ''Bob'', '':city'' => ''Montreal'') ); echo $db->lastInsertId();



La función de MySQL LAST_INSERT_ID() hace justo lo que necesita: recupera la identificación que se insertó durante esta sesión . Por lo tanto, es seguro de usar, incluso si hay otros procesos (otras personas que llaman el mismo guión, por ejemplo) insertando valores en la misma tabla.

La función PHP mysql_insert_id() hace lo mismo que llamar a SELECT LAST_INSERT_ID() con mysql_query() .


Otra posible respuesta será:

Cuando defines la tabla, con las columnas y los datos que tendrá. La identificación de la columna puede tener la propiedad AUTO_INCREMENT .

Con este método, no tiene que preocuparse por la identificación , se hará automáticamente .

Por ejemplo (tomado de w3schools )

CREATE TABLE Persons ( ID int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (ID) )

Espero que esto sea útil para alguien.

Editar: Esta es solo la parte donde se define cómo generar un ID automático, para obtenerlo después de creado, las respuestas anteriores son correctas.


Pruebe de esta manera puede obtener la respuesta:

<?php $con=mysqli_connect("localhost","root","","new"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } mysqli_query($con,"INSERT INTO new values(''nameuser'',''2015-09-12'')"); // Print auto-generated id echo "New record has id: " . mysqli_insert_id($con); mysqli_close($con); ?>

Eche un vistazo a los siguientes enlaces:

http://www.w3schools.com/php/func_mysqli_insert_id.asp

http://php.net/manual/en/function.mysql-insert-id.php

Además, tenga en cuenta que esta extensión se desaprobó en PHP 5.5 y se eliminó en PHP 7.0


Solo quiero agregar un pequeño detalle sobre lastInsertId() ;

Al ingresar más de una fila a la vez, no devuelve el último Id , sino el primer Id de la colección de los últimos insertos.

Considera el siguiente ejemplo

$sql = ''INSERT INTO my_table (varNumb,userid) VALUES (1, :userid), (2, :userid)''; $sql->addNewNames = $db->prepare($sql); addNewNames->execute(array('':userid'' => $userid)); echo $db->lastInsertId();

Lo que sucede aquí es que my_table en my_table dos nuevas filas. La identificación de la tabla es autoincremental. Aquí, para el mismo usuario, agrego dos filas con un varNumb diferente.

El valor echoed al final será igual al id de la fila donde varNumb=1 , lo que significa no el id de la última fila, sino el id de la primera fila que se agregó en la última solicitud.


Un ejemplo.

$query_new = "INSERT INTO students(courseid, coursename) VALUES ('''', ?)"; $query_new = $databaseConnection->prepare($query_new); $query_new->bind_param(''s'', $_POST[''coursename'']); $query_new->execute(); $course_id = $query_new->insert_id; $query_new->close();

La línea de código $course_id = $query_new->insert_id; mostrará la identificación de la última fila insertada. Espero que esto ayude.


$link = mysqli_connect(''127.0.0.1'', ''my_user'', ''my_pass'', ''my_db''); mysqli_query($link, "INSERT INTO mytable (1, 2, 3, ''blah'')"); $id = mysqli_insert_id($link);

Ver mysqli_insert_id() .

Haga lo que haga, no inserte y luego haga un " SELECT MAX(id) FROM mytable ". Como dices, es una condición de carrera y no es necesario. mysqli_insert_id() ya tiene esta funcionalidad.