PHP 中怎么获取主键ID?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 中怎么获取主键ID?相关的知识,希望对你有一定的参考价值。
参考技术A 嘛意思,你是想得到一张表中主键(auto_increment型字段)最后的那条记录的id吗
1,如果是,这种方法多了,比如楼上mysql_insert_id这个函数是得到最后insert语句产生的id,你之前没有insert操作,那是得不到的.
2,你可以select
*
from
table
order
by
id
desc
limit
1
他的意思就是把id倒序排列(5,4,3,2,1这样的排序方式)并得到第一条数据,这样就是得到最后插入的数据,你就可以得到那个id了.
如果我的主键不自动递增,如何使用 PHP 获取最后插入的 ID
【中文标题】如果我的主键不自动递增,如何使用 PHP 获取最后插入的 ID【英文标题】:How to obtain with PHP the last ID inserted if my primary key does not autoincrement 【发布时间】:2012-04-06 11:09:25 【问题描述】:我在 MySQL 中有一个表,出于兼容性问题,我们分配了特定的主键,因此它们不能自动递增。
每次我们插入一个新的倒塌(在 PHP 中)时,我们都需要取回最新插入的 ID。听起来可能很愚蠢。但是我们不是从 PHP 生成 ID,它来自一个通用的 AJAX 函数,因此我们不知道包含主键的变量的名称,它总是在变化。
有没有办法使用 PHP 或 MYSQL 来获取为不自动递增的主键插入的最新 ID?
很遗憾,如果没有 auto_increment,mysql_insert_id() 和 last_insert_id() 将无法工作。
谢谢!
【问题讨论】:
如果您的主键没有自动递增,那么您应该在插入之前已经知道它。 有一个created_on
列并获取最新的。
MAX()
仅在您确定数量正在增加时才有效,否则请参阅时间戳解决方案。
@Arman,这很明显。我希望 OP 能够响应“我不能使用 MAX() 因为它是非升序的,这里有更多信息……”或“当然,我将使用 MAX()”的效果。 :)
MAX 是一个非首发,因为两个不同的请求几乎可以同时进行插入,并且您最终可能会得到错误的 id。 Plus max 需要一个操作员说他不知道的列名?这非常令人困惑。你怎么能在不知道你在插入什么的情况下进行插入?只是将一些日期扔到一些随机表中?如果您知道表名,那么您为什么不知道主键名?到底什么是倒塌?
【参考方案1】:
前往本页的 cmets 部分。 http://php.net/manual/en/function.mysql-insert-id.php 您应该会看到一些可能对您有用的方法。
我会尝试插入特定的时间戳,然后再次调用该时间戳插入。
戴夫在此评论中很好地解释了这一点。引用他的话..
这里有很多关于“不要使用 AI”和“使用最大值”的错误信息 是等效的”。然后你有人不恰当地建议你使用 伪随机数
如果你真的担心 AI 领域不会因为 固有的竞争条件,只需根据 vars 你刚刚输入。如果您的变量不是唯一的,请不要使用这些 伪随机数。当您有足够的迭代次数时, 这些随机数之一成为重复的概率得到 相当高。
相反,只需使用 unix 时间戳。但是,不要使用 UNIX_TIMESTAMP() 在你的查询中,因为如果你这样做,当你运行你的 select 语句之后,有可能你最终会 具有不同的时间戳。
由于 date() 在脚本执行期间继续计数, 只需将 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'");
//...
?>
【讨论】:
【参考方案2】:以下 SQL 语句将获取最后插入的 PK id。 在您的插入语句之后执行此操作...
SELECT LAST_INSERT_ID() FROM tblName;
没错,我忘了你提到你的 PK 不是自动递增的。然后用时间戳解决方案查看答案。这是我知道你可以做到这一点的唯一方法。但最好有自动增量字段。也许您需要检查您的数据库方案。
【讨论】:
LAST_INSERT_ID()
仅适用于 auto_increment 列。 OP 说这不是一个 auto_increment 列。
编辑指向正确答案,谢谢@Marcus,我忘了他没有自动增量。以上是关于PHP 中怎么获取主键ID?的主要内容,如果未能解决你的问题,请参考以下文章