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

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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Ответ 4

С PDO:

$pdo->lastInsertId();

С Mysqli:

$mysqli->insert_id;

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

Ответ 6

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

Ответ 7

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

$id = mysql_insert_id();

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

$id = last_insert_id();

Ответ 8

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

Ответ 9

Чтобы получить последний вставленный идентификатор в 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();

Ответ 10

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

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

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

echo mysqli_insert_id($link);

Ответ 11

ПРИМЕЧАНИЕ. Если вы делаете несколько вставк с одним из операторов 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

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

Ответ 12

Я предпочитаю использовать чистый синтаксис 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';

Что это.

Ответ 13

Жаль, что мы не увидели каких-либо ответов с примером.

Использование 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

Ответ 14

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

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

Ответ 15

Используя транзакцию 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;
}

?>

Ответ 16

Используйте 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();
?>

Ответ 17

$lastid = mysql_insert_id();

Ответ 18

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

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

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

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

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

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

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

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

Ответ 19

Если в вашей таблице есть столбец 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);

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

Ответ 20

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

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