【问题标题】:Struggling to retrieve the last insert ID in PHP with MS SQL [duplicate]努力使用 MS SQL 检索 PHP 中的最后一个插入 ID [重复]
【发布时间】:2023-04-01 11:15:01
【问题描述】:

我知道有类似的问题,并且我尝试了各种示例,但我似乎遗漏了一些东西。

我正在使用PHP在MS SQL表中插入一条记录,代码如下...

 $sql = "Insert into MyTable (column1,column2,column3) VALUES (? , ? , ?);";
 $params = array($value1,$value2,$value3);
 $stmt = sqlsrv_query( $conn, $sql, $params);
 if( $stmt === false ) {
 Echo "Error writing new application to table";
 }  

这工作正常,我的记录已添加,但我需要获取最后插入记录的“id”。

查看之前关于此的一些问题,我尝试了几种不同的方法,最近是这个......

 $sql = "Insert into MyTable (column1,column2,column3) VALUES (? , ? , ?);";
 $params = array($value1,$value2,$value3);
 $stmt = sqlsrv_query( $conn, $sql, $params);
 sqlsrv_next_result($stmt); 
 sqlsrv_fetch($stmt);
 $lastInsertedId = lastId($stmt);
 echo "RECORD INSERTED WITH ID: " . $lastInsertedId . "<BR>"; 
 if( $stmt === false ) {
 Echo "Error writing new application to table";
 }

但“lastInsertedId”返回空白。

当我过去做过类似的事情时,虽然不是在 PHP 中,但我在插入命令的末尾有一个附加命令,并使用了与查询不同的函数,但我似乎找不到任何示例这个。

谁能指出我正确的方向?

非常感谢!

编辑/解决方案:

所以我终于得到了这个工作......提供的其他示例都返回了一个空值,除了返回一个数组的那个,所以我尝试在它的末尾抛出 ["id"] 并繁荣......就在那里!

 $sql = "Insert into MyTable(column1,column2,column3) VALUES (? , ? , ?); SELECT @@IDENTITY as id;";
 $params = array($value1,$value2,$value3);
 $stmt = sqlsrv_query( $conn, $sql, $params);
 $next_result = sqlsrv_next_result($stmt); 
 $row = sqlsrv_fetch_array($stmt); 
 echo "ROW INSERTED WITH ID : " . $row["id"];
 if( $stmt === false ) {
 Echo "Error writing new application to table";
 }  

如果您遇到同样烦人的简单问题,希望这可能对您有所帮助。

【问题讨论】:

  • 快速搜索一下,听起来很熟悉吗? stackoverflow.com/questions/5228780/how-to-get-last-inserted-id - 似乎您需要检索 ID 作为 MS-SQL 查询的一部分。
  • 来自我的谷歌搜索 lastId 用于 MySQL,而不是 SQL Server。 @droopsnoot 这个问题是针对 C# 的;完全不同的语言。
  • @Larnu 是的,我确实注意到它是一种不同的语言,但它似乎说明了如何将它添加到查询中然后检索,正如 OP 建议他们之前所做的那样。当他们执行fetch 时,肯定会从查询中检索输出,这将是最后插入的 ID?

标签: php sql-server last-insert-id


【解决方案1】:

查看在线文档,看起来lastId() 不是 PHP 方法。你应该试试mysql_insert_id() 这样的东西:

检索前一个查询(通常是 INSERT)为 AUTO_INCREMENT 列生成的 ID。

不幸的是,根据official documentation,此扩展在 PHP 5.5.0 中已被弃用,并在 PHP 7.0.0 中被删除。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。

【讨论】:

  • OP 明确声明他们使用的是 MS SQL 而不是 MySQL。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
相关资源
最近更新 更多