如何获取主键,它是刚刚在 PHP 中输入的行的自动增量?
Posted
技术标签:
【中文标题】如何获取主键,它是刚刚在 PHP 中输入的行的自动增量?【英文标题】:How to get the primary key which is an auto-increment for the row just entered in PHP? 【发布时间】:2011-09-20 06:08:30 【问题描述】:我有一个类似的 SQL 查询
$result = mssql_query("INSERT into CALLER
( status, media, media_2, first_name, last_name, street_address, city,
state, zipcode, home_phone_no, mobile_phone_no,email, problem,
medical_condition, comments, updated_date )
VALUES
('CALL', '$media', '$media_2','$fname','$lname', '$street_addr', '$city',
$state','$zip', '$phone_alt', '$phone','$email','$problem','$mc',
'$comments',GetDate() ); ");
primary key for the table CALLER is an auto-increment
。如何获取此查询后刚刚插入的行的主键?
【问题讨论】:
【参考方案1】:更正:使用这个。
$query = mssql_query("SELECT @@IDENTITY");
$row = mssql_fetch_assoc($query);
【讨论】:
这样的插入查询可以同时完成我的许多客户。所以获取最新的 PK 是行不通的。比如说,我是 userA,我负责插入查询。我可以获取为我触发的查询生成的 PK 吗? 作为高级用户,我们应该始终教导编写可读的代码,这就是为什么我用 $query 和 $row 替换了 $q 和 $r。不只是在这里,在代码中稍后出现变量的任何地方,都会更直观地阅读。比如 unset($query) 或 process($row)... 还需要把第2行的变量名:$q改成$query。 你真的应该改用scope_identity()
。 msdn.microsoft.com/en-us/library/ms190315.aspx【参考方案2】:
如果您在表中有任何CANDIDATE KEY,您可以使用它来检索最后插入的行。
假设您有一个由 status
、email
和 problem
列组成的候选键。
然后你可以在插入之后执行这样的查询。
$query = "SELECT id FROM CALLER
WHERE
status = '" . $status . "'
AND email = '" . $email . "' AND
problem = '" . $problem . "'";
mssql_query($query);
这将返回该条目的 id。
更新 我刚刚在 Mikael 对 Femi's Answer 的评论中看到了这一点,您可以使用 SCOPE_IDENTITY()
它返回当前范围内当前连接的 las 插入 id。因此,即使多个实例进行交错插入,它也应该为您工作。
所以你可以在插入之后简单地这样做
$res = mssql_query('SELECT SCOPE_IDENTITY()');
【讨论】:
以上是关于如何获取主键,它是刚刚在 PHP 中输入的行的自动增量?的主要内容,如果未能解决你的问题,请参考以下文章
在 python 中运行 session.execute 后获取插入行的主键
Python/postgres/psycopg2:获取刚刚插入的行的 ID