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