Как получить с помощью PHP последний идентификатор, вставленный, если мой первичный ключ не имеет автоинкремента - PullRequest
0 голосов
/ 22 марта 2012

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

Каждый раз, когда мы вставляем новый topple (в PHP), нам нужно возвращатьпоследний идентификатор вставлен.Это может звучать глупо.но мы не генерируем идентификатор из PHP, он исходит из общей функции AJAX, поэтому мы не знаем имя переменной, содержащей первичный ключ, она всегда меняется.

Есть ли способ, используяPHP или MYSQL, чтобы получить последний идентификатор, вставленный для первичного ключа, который не имеет автоматического приращения?

К сожалению, mysql_insert_id () и last_insert_id () не работают без auto_increment.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

Загляните в раздел комментариев на этой странице.http://php.net/manual/en/function.mysql-insert-id.php И вы должны увидеть некоторые методы, которые могли бы работать для вас.

Я бы попытался вставить определенную метку времени и затем снова вызвать эту вставку времени.

Дейв хорошо объясняет это в этом комментарии.Цитируя его ..


Здесь много неверной информации о том, что "не используйте ИИ" и "использование макс равнозначно".Тогда у вас есть люди, которые неправильно советуют вам использовать псевдослучайные числа

Если вы действительно беспокоитесь о том, что поле ИИ не возвращается из-за присущих условий гонки, просто сделайте оператор выбора на основе введенных вами переменных,Если ваши переменные не являются уникальными, НЕ используйте эти псевдослучайные числа.Когда у вас достаточно итераций, вероятность того, что один из этих случайных символов станет дубликатом, становится довольно высокой.

Вместо этого просто используйте метку времени Unix.Однако не используйте UNIX_TIMESTAMP () в своем запросе, потому что, если вы это сделаете, когда вы запустите оператор select сразу после этого, есть вероятность, что у вас будет другая временная метка.

С даты () продолжает считать во время выполнения скрипта, просто сохраните дату (U) в переменной или определении.Затем вставьте и выберите на основе этого.Предполагая, что вы не используете процедуры MySQL:

<?php

define(UNIX_TIMESTAMP, date('U'));

$db->query("insert into table values('', 'a', 'b', 'c', 'd', '".UNIX_TIMESTAMP."'");
$res = $db->query("select id from table where a_col = 'a' and b_col = 'b' and c_col = 'c' and d_col = 'd' and temp_id = 'UNIX_TIMESTAMP'");

//...

?>
2 голосов
/ 22 марта 2012

Следующий оператор SQL получит последний вставленный идентификатор PK. Сделайте это после вашего оператора вставки ...

SELECT LAST_INSERT_ID() FROM tblName;

Правда, я забыл, что вы упомянули, что ваш ПК не увеличивается автоматически. Затем посмотрите ответ с меткой времени. Это единственный способ, которым я знаю, что ты можешь сделать это. Но предпочтительно иметь поле автоинкремента. Может быть, вам нужно пересмотреть схему базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...