Pregunta Fila de inserción de PHP / MySQL luego obtener 'id'


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.


183
2018-05-22 11:07


origen


Respuestas:


$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().

Hagas lo que hagas, no lo insertes y luego haz 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.


240
2018-05-22 11:09



La función MySQL LAST_INSERT_ID() hace exactamente 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 de PHP mysql_insert_id() hace lo mismo que llamar SELECT LAST_INSERT_ID() con mysql_query().


39
2018-05-22 11:14



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();

26
2017-07-30 15:16



Como dijo @NaturalBornCamper, mysql_insert_id ahora está en desuso y debería no ser usado. Las opciones ahora son usar PDO o mysqli. NaturalBornCamper explicó PDO en su respuesta, así que le mostraré cómo hacerlo con MySQLi (MySQL mejorado) utilizando 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: http://php.net/manual/en/mysqli.insert-id.php


19
2017-08-25 04:05



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

Al ingresar más de una fila en el momento, no devuelve el último Id., pero el primer Id de la colección de las últimas inserciones.

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 presiono my_table dos nuevas filas. La identificación de la tabla es autoincremental. Aquí, para el mismo usuario, agrego dos filas con una diferente varNumb.

El valor echoed al final será igual al id de la fila donde varNumb=1, lo que significa que no es la identificación del último fila, pero la identificación de la primera fila que se agregó en la última solicitud.


7
2017-12-14 09:48



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.


1
2017-10-21 07:40



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


1
2017-09-12 15:23



Encontré una respuesta en el enlace de arriba http://php.net/manual/en/function.mysql-insert-id.php

La respuesta es:

mysql_query("INSERT INTO tablename (columnname) values ('$value')");        
echo $Id=mysql_insert_id();

1
2017-12-23 18:47



Prueba esto ... ¡funcionó para mí!

$sql = "INSERT INTO tablename (row_name) VALUES('$row_value')";
    if (mysqli_query($conn, $sql)) {
    $last_id = mysqli_insert_id($conn);
    $msg1 = "New record created successfully. Last inserted ID is: " . $last_id;
} else {
    $msg_error = "Error: " . $sql . "<br>" . mysqli_error($conn);
    }

0
2017-07-11 11:47



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 AUTOINCREMENTO.

Por este método, no tiene que preocuparse por la carné de identidad, eso'll 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.


-1
2017-11-27 16:45