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

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

Он похож на SELECT MAX(id) FROM table ?

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

Если вы используете 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(); 

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

Эта функция называется 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() в базе данных, он вернет последний вставленный идентификатор

Пример:

 $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 любой таблицы в вашей схеме (а не только последняя транзакция), вы можете использовать этот запрос

 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. Особенно если я использовал хранимые процедуры, которые выполняли INSERT . Таким образом, в транзакции есть другой способ:

 <?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; } ?> с <?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 лишает

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

$ lastid = mysql_insert_id ();

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

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

Случай, если какая-либо другая информация INSERT между вашим CHECK и INSERT даст вам неправильный идентификатор.

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

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

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

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

Удачи вам в этом.

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