Как получить последний вставленный идентификатор таблицы MySQL в PHP?
У меня есть таблица, в которую часто вставляются новые данные. Мне нужно получить самый последний идентификатор таблицы. Как я могу это сделать?
это похоже на SELECT MAX(id) FROM table
?
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. Особенно если я использую хранимые процедуры, которые выполняютсяINSERT
s. таким образом, есть еще один способ в транзакции:<?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();
при всем этом обсуждении я предполагаю, что причина проверки 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);
тогда вы можете использовать полученные данные в качестве вашего требования