Я не могу получить последнюю вставленную запись/идентификатор из MySQL

У меня есть вопрос. Кажется, я не могу получить последнюю вставленную запись/идентификатор из моей базы данных/таблицы MySQL. Я хочу вернуть последний вставленный идентификатор из столбца tag_id, но я вообще ничего не получаю. Кстати, я использую DBO. Я пробовал как «mysql_insert_id», так и «lastInsertId», но безуспешно.

Моя таблица базы данных выглядит так:

Имя таблицы: gitags_tags

  tag_id  |  name  
----------+---------
   437    |  2011
   438    |  2012
   439    |  2013
   440    |  new

Мой PHP выглядит так (в этом случае я хочу вернуть «440»):

/*
* Insert the new tagname in the database in the table 'gitags_tags'
*/
$query = "INSERT INTO gitags_tags (`name`) VALUES ('".$new_tagname."')";
$db->setQuery($query);

if (!$db->query()) {
    echo "Something went wrong \n";
    echo $query . "\n";
    exit;
}

// Neither of these two work ...
echo mysql_insert_id();
echo $db->lastInsertId('tag_id');

Буду признателен за любую оказанную помощь.


person Agonius    schedule 28.11.2013    source источник
comment
Это должно быть проблема Joomla. Пожалуйста, прочитайте это.   -  person Ravinder Reddy    schedule 28.11.2013
comment
Если вы пытаетесь получить данные из базы данных, покажите select запрос, а не insert запрос. Прочтите документацию Joomla по кодированию запросов к базе данных с использованием стандартов Joomla! docs.joomla.org/Selecting_data_using_JDatabase ....и.... docs.joomla.org/   -  person Lodder    schedule 28.11.2013
comment
попробуйте это var_dump($db-›mysql_insert_id());   -  person Mayur Kukadiya    schedule 28.11.2013
comment
var_dump дает «NULL».   -  person Agonius    schedule 28.11.2013
comment
Вам действительно нужен последний тег или вам нужен тот, который вы обрабатывали, т.е. чтобы получить ключ? Проблема с большинством этих подходов для последнего заключается в том, что какой-то другой процесс мог быть вставлен после вашего.   -  person Elin    schedule 28.11.2013


Ответы (4)


Чтобы получить последнюю вставленную запись, вы можете использовать это:

$db = JFactory::getDbo();
$query = $db->getQuery(true);

$query->select($db->quoteName('tag_id'))
 ->from($db->quoteName('gitags_tags'))
 ->order($db->quoteName('tag_id') . ' DESC');

$db->setQuery($query);
$result = $db->loadResult();

echo $result;
person Lodder    schedule 28.11.2013

Вы используете недопустимую функцию базы данных Joomla, используйте вместо нее echo $db->insertid();.

person GDP    schedule 31.05.2014
comment
Это, наконец, то, что сработало для меня. Так расстраивает ха. - person JedtheMarine; 07.02.2020

Он должен работать, повторяя новый SQL-запрос с DESC и LIMIT. Как это:

SELECT tag_id FROM gitags_tags ORDER BY tag_id  DESC LIMIT 1
person Froxx    schedule 28.11.2013

убедитесь, что tag_id также установлен как первичный ключ и инкремент.

/*
* Insert the new tagname in the database in the table 'gitags_tags'
*/
$query = "INSERT INTO gitags_tags (`name`) VALUES ('".$new_tagname."')";
$db->setQuery($query);

echo mysql_insert_id();
echo $db->lastInsertId('tag_id');

//Use select query and echo this record with this tag_id.
person user3045573    schedule 28.11.2013