我在MySQL中有一个表,为了兼容性问题我们分配了特定的主键,因此它们不能自动递增。
每当我们插入一个新的topple(在PHP中)时,我们需要返回插入的最新ID。这可能听起来很愚蠢。但我们不会从PHP生成ID,它来自通用的AJAX函数,因此我们不知道包含主键的变量的名称,它总是会更改。
有没有办法,使用PHP或MYSQL,获取为不自动递增的主键插入的最新ID?
不幸的是,如果没有auto_increment,mysql_insert_id()和last_insert_id()就无法工作。
谢谢!
答案 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没有自动递增。然后使用时间戳解决方案查看答案。这是我知道你能做到的唯一方法。但最好有自动增量字段。也许你需要检查你的数据库方案。