如何获取主键,它是刚刚在 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,您可以使用它来检索最后插入的行。

假设您有一个由 statusemailproblem 列组成的候选键。

然后你可以在插入之后执行这样的查询。

$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 后获取插入行的主键

我想获取我刚刚插入的行的 ID。我可以知道怎么做吗[重复]

Python/postgres/psycopg2:获取刚刚插入的行的 ID

TSQL获取刚刚插入的行的SQL Autonumber ID

更改数据库行的主键值

CakePHP:如何获取与 slug 匹配的行的 ID?