Как получить последний вставленный идентификатор таблицы MySQL в PHP?


У меня есть таблица, в которую часто вставляются новые данные. Мне нужно получить самый последний идентификатор таблицы. Как я могу это сделать?

это похоже на SELECT MAX(id) FROM table?

22 85

22 ответа:

если вы используете PDO, используйте PDO::lastInsertId.

если вы используете Mysqli, используйте mysqli::$insert_id.

если вы все еще используете Mysql:

пожалуйста, не используйте mysql_* функции в новом коде. Они больше не поддерживаются и официально осуждаемый. Смотрите Красное поле? Узнайте о подготовленные заявления , и использовать PDO или MySQLi -в этой статье поможет вам решить, какой. Если вы выберете PDO,вот хороший учебник.

но если вам нужно, используйте mysql_insert_id.

есть функция, чтобы узнать, какой был последний идентификатор вставлен в текущее соединение

mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();

плюс с помощью Макс это плохая идея потому что это может привести к проблемы если ваш код используется одновременно в двух разных сессиях.

эта функция называется mysql_insert_id

все в порядке. Также вы можете использовать LAST_INSERT_ID ()

С PDO:

$pdo->lastInsertId();

С Mysqli:

$mysqli->insert_id;

пожалуйста, не используйте mysql_* функции в новом коде. Они больше не поддерживаются и официально осуждаемый. Смотрите Красное поле? Узнайте о подготовленные заявления вместо этого, и использовать PDO или MySQLi -этот статья поможет вам решить, какой. Если вы выберете PDO,вот хороший учебник.

использовать mysql_insert_id ()

то, что вы написали бы вам самый большой id предполагая, что они были уникальными и автоматически увеличенными, это было бы хорошо, если бы Вы были в порядке с приглашением проблем параллелизма.
Поскольку вы используете MySQL в качестве базы данных, есть определенная функция LAST_INSERT_ID() который работает только на текущем соединении, которое сделало вставку.
PHP предлагает определенную функцию для этого тоже называется mysql_insert_id.

вы можете получить последний вставленный идентификатор с помощью встроенной функции php mysql_insert_id();

$id = mysql_insert_id();

вы также получите последнюю идентификатор

$id = last_insert_id();

чтобы получить последний вставленный идентификатор в codeigniter После выполнения запроса insert просто используйте одну функцию с именем insert_id() в базе данных, он возвращает последний вставленный идентификатор

Ex:

$this->db->insert('mytable',$data);
echo $this->db->insert_id(); //returns last inserted id

в одну строку

echo $this->db->insert('mytable',$data)->insert_id();

это нормально использовать mysql_insert_id(), но есть одна конкретная заметка об использовании его, вы должны вызвать его после выполнения запроса INSERT, то есть в том же сеансе скрипта. Если вы используете его, в противном случае он не будет работать правильно.

попробуйте это должно работать нормально:

$link = mysqli_connect("localhost", "my_user", "my_password", "world");

$query = "INSERT blah blah blah...";
$result = mysqli_query($link, $query);

echo mysqli_insert_id($link);

Примечание: Если вы делаете несколько вставок с одним оператором mysqli:: insert_id не будет правильным.

стол:

create table xyz (id int(11) auto_increment, name varchar(255), primary key(id));

Если вы:

insert into xyz (name) values('one'),('two'),('three');

mysqli:: insert_id будет 1 не 3.

чтобы получить правильное значение:

mysqli::insert_id + mysqli::affected_rows) - 1

Это был документ, но он немного неясен.

Я предпочитаю использовать чистый синтаксис MySQL, чтобы получить последний идентификатор auto_increment таблицы, которую я хочу.

php mysql_insert_id() и mysql last_insert_id () дают только последний идентификатор транзакции.

Если вы хотите последний AUTO_INCREMENTED ID любой таблицы в вашей схеме (не только последняя транзакция), вы можете использовать этот запрос

SELECT AUTO_INCREMENT FROM information_schema.TABLES
    WHERE TABLE_SCHEMA = 'my_database' 
    AND TABLE_NAME = 'my_table_name';

вот и все.

грустно не видеть никаких ответов с примером.

используя 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

используя PDO:: lastInsertId:

$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$database->query($sql);
$last_inserted_id=$database->lastInsertId(); // returns last ID

чистый и простой -

$selectquery="SELECT id FROM tableName ORDER BY id DESC LIMIT 1";
$result = $mysqli->query($selectquery);
$row = $result->fetch_assoc();
echo $row['id'];

используя MySQLi транзакция, которую я иногда не мог получить mysqli::$insert_id, потому что он возвращается 0. Особенно если я использую хранимые процедуры, которые выполняются INSERTs. таким образом, есть еще один способ в транзакции:

<?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;
}

?>

использовать mysqli как mysql - это 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();
?>

пробовал

mysqli_insert_id ($dbConnectionObj)

Это возвращает последний вставленный идентификатор текущего соединения, поэтому, если вы правильно управляете своими соединениями, это должно работать. По крайней мере, работал на меня.

пожалуйста, используйте PDP, а затем попробуйте это

$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();

$lastid = mysql_insert_id();

при всем этом обсуждении я предполагаю, что причина проверки max id заключается в том, чтобы знать, какой идентификатор должен быть следующим.. (если мой Макс ИД 5, то следующий будет 5+1=6).

>>Если это не причина, мои лучшие извинения

Если кто-то другой вставляет информацию между вашей проверкой и вставкой, это даст вам неправильный идентификатор.

поэтому он может быть решен, если вы создадите хэш, который может включать метку времени или другое уникальное значение.

тогда в том же функция вы можете вставить информацию с пустыми значениями и хэшем. Это создаст идентификатор, если вы выбрали AUTO_INCRECEMENT.

тогда в той же функции у вас все равно будет свой хэш, и вы можете искать идентификатор с тем же хэшем. И тогда вы можете завершить заполнение пустых значений с обновлением mysql.

Это включает в себя немного больше соединений, но это все-таки способ сделать это...

удачи в ее решении.

Если в вашей таблице есть столбец автоматического увеличения, например UserID, Emp_ID,.. затем вы можете использовать этот запрос, чтобы получить последней вставленной записи SELECT * FROM table_name where UserID=(select MAX (UserID)from table_name) В 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);

тогда вы можете использовать полученные данные в качестве вашего требования

mysql_query("INSERT INTO mytable (product) values ('kossu')");

printf("Last inserted record has id %d\n", ***mysql_insert_id()***);