У меня есть таблица, в которую часто вставляются новые данные. Мне нужно получить самый последний идентификатор таблицы. Как я могу это сделать?
Он похож на SELECT MAX(id) FROM table
?
У меня есть таблица, в которую часто вставляются новые данные. Мне нужно получить самый последний идентификатор таблицы. Как я могу это сделать?
Он похож на 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
, предполагая, что они были уникальными и автоматически увеличивались, что было бы неплохо, если бы вы были в порядке с приглашением concurrency.
Поскольку вы используете MySQL в качестве своей базы данных, существует определенная функция LAST_INSERT_ID()
, которая работает только с текущим соединением, которое вставляло. < ш > PHP предлагает определенную функцию для так называемого mysql_insert_id
.
Вы можете получить последний вставленный идентификатор с помощью встроенной функции php mysql_insert_id();
$id = mysql_insert_id();
вы также получите последний идентификатор
$id = last_insert_id();
Хорошо использовать mysql_insert_id()
,
но есть одна конкретная заметка об использовании его, вы должны вызывать ее после выполнения запроса INSERT, означает в том же сеансе script.
Если вы используете его в противном случае, это не сработает правильно.
Чтобы получить последний вставленный идентификатор в codeigniter
После выполнения запроса вставки просто используйте одну функцию под названием insert_id()
в базе данных, она вернет последний вставленный id
Пример:
$this->db->insert('mytable',$data);
echo $this->db->insert_id(); //returns last inserted id
в одной строке
echo $this->db->insert('mytable',$data)->insert_id();
Попробуйте, это должно работать нормально:
$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
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 лишает
<?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 имя_таблицы, где 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()***);