如果我的主键没有自动增量,如何使用PHP获取插入的最后一个ID

时间:2012-03-21 21:15:11

标签: php mysql primary-key auto-increment

我在MySQL中有一个表,为了兼容性问题我们分配了特定的主键,因此它们不能自动递增。

每当我们插入一个新的topple(在PHP中)时,我们需要返回插入的最新ID。这可能听起来很愚蠢。但我们不会从PHP生成ID,它来自通用的AJAX函数,因此我们不知道包含主键的变量的名称,它总是会更改。

有没有办法,使用PHP或MYSQL,获取为不自动递增的主键插入的最新ID?

不幸的是,如果没有auto_increment,mysql_insert_id()和last_insert_id()就无法工作。

谢谢!

2 个答案:

答案 0 :(得分:3)

请转到本页的评论部分。 http://php.net/manual/en/function.mysql-insert-id.php 你应该看到一些可能对你有用的方法。

我会尝试插入特定的time_stamp,然后再次调用time_stamp insert。

戴夫在这篇评论中做了很好的解释。引用他......


  

“不使用AI”和“使用最大值”这里有很多不正确的信息   相当于“。那么你就有人不正当地建议你使用   伪随机数

     

如果你真的担心AI领域因为没有返回   固有的竞争条件,只需做一个基于的选择声明   你输入的变量。如果您的vars不是唯一的,请不要使用这些   伪随机数。当你有足够的迭代时,   这些随机变为重复的概率得到了   很高。

     

相反,只需使用unix时间戳。但是,不要使用   查询中的UNIX_TIMESTAMP(),因为如果你这样做,当你运行你的   选择声明之后,你有可能会结束   使用不同的时间戳。

     

由于date()在执行脚本期间继续计数,   只需将日期(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'");

//...

?>

答案 1 :(得分:2)

以下SQL语句将获取PK的最后插入ID。 在插入语句后执行...

SELECT LAST_INSERT_ID() FROM tblName;

是的,我忘了你提到你的PK没有自动递增。然后使用时间戳解决方案查看答案。这是我知道你能做到的唯一方法。但最好有自动增量字段。也许你需要检查你的数据库方案。