【问题标题】:How to get the primary key which is an auto-increment for the row just entered in PHP?如何获取主键,它是刚刚在 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。如何获取此查询后刚刚插入的行的主键?

【问题讨论】:

    标签: php sql sql-server


    【解决方案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()');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 1970-01-01
      • 2011-05-20
      相关资源
      最近更新 更多