【发布时间】: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