我似乎无法从 MySQL 获取最后插入的记录/ID
Posted
技术标签:
【中文标题】我似乎无法从 MySQL 获取最后插入的记录/ID【英文标题】:I can't seem to get the last inserted record/id from MySQL 【发布时间】:2013-12-14 09:06:00 【问题描述】:我有一个问题。我似乎无法从我的 mysql 数据库/表中获取最后插入的记录/ID。我想从“tag_id”列中返回最后插入的 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');
非常感谢任何帮助。
【问题讨论】:
一定是 Joomla 的问题。请read this. 如果您尝试从数据库中获取数据,请显示select
查询,而不是您的insert
查询。阅读有关使用 Joomla 标准编码数据库查询的 Joomla 文档! docs.joomla.org/Selecting_data_using_JDatabase ....和.... docs.joomla.org/…
试试这个 var_dump($db->mysql_insert_id());
var_dump 给出 'NULL'。
您真的想要最后一个标签,还是想要您正在处理的标签,即获取密钥?对于后者,大多数这些方法的问题是在你的之后可能插入了一些其他进程。
【参考方案1】:
确保 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.
【讨论】:
【参考方案2】:它应该通过使用 DESC 和 LIMIT 回显一个新的 SQL 查询来工作。像这样:
SELECT tag_id FROM gitags_tags ORDER BY tag_id DESC LIMIT 1
【讨论】:
【参考方案3】:要获取最后插入的记录,您可以使用:
$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;
【讨论】:
【参考方案4】:您使用了无效的 Joomla DB 函数,请改用 echo $db->insertid();
。
【讨论】:
这终于对我有用了。真令人沮丧哈。以上是关于我似乎无法从 MySQL 获取最后插入的记录/ID的主要内容,如果未能解决你的问题,请参考以下文章
为啥我无法在 PHP 和 MySQL 中获取最后一个插入 ID?
如何获取使用 EF Core 从存储过程中插入的记录的 id 值