获取最后一个插入 id sqlsrv

Posted

技术标签:

【中文标题】获取最后一个插入 id sqlsrv【英文标题】:Grabbing last insert id sqlsrv 【发布时间】:2014-05-06 10:05:16 【问题描述】:

我正在编写一个 php 代码,我在其中插入两个表并想从我插入的第一个表中获取 id,现在我收到此错误:Call to undefined function sqlsrv_field()。我正在尝试从表routines 中获取routine_id

代码:

date_default_timezone_set('Europe/Oslo');
$date = strftime ('%Y-%m-%d'); 
$time = strftime('%H:%M:%S');


$value = $_GET['Temp'];

$conn = sqlsrv_connect('BILAL' , $conn_array);

$sql = "Insert into routines (date, time, value, emp_id)  values ('$date', '$time', '$value', (SELECT id FROM emps WHERE user_name='Arduino'))";


if ( sqlsrv_begin_transaction( $conn ) === false ) 
     die( print_r( sqlsrv_errors(), true ));


$query = sqlsrv_query( $conn, $sql);
if( $query === false ) 
     die( print_r( sqlsrv_errors(), true));


sqlsrv_next_result($query);
sqlsrv_fetch($query);
$id = sqlsrv_field($query,0);
$sql2 = "Insert into measure_routines (routine_id, measure_id, pool_id) values ('$id', (Select id from measurements where title='A_Auto_Temperatur'), 1 )";

$stmt = sqlsrv_query( $conn, $sql2);
if( $stmt === false ) 
     die( print_r( sqlsrv_errors(), true));
   

【问题讨论】:

【参考方案1】:

没有名为sqlsrv_field() 的函数。相反,请使用sqlsrv_get_field():

...

sqlsrv_next_result($query);

bool fetchStatus = sqlsrv_fetch($query);

if(fetchStatus === false) 
   die( print_r( sqlsrv_errors(), true));


if(fetchStatus === null) 
   // Some work when there are no results in the result set
 else 
   $id = sqlsrv_get_field($query, 0);


...

这应该基本上可以解决您的问题。但是,您的代码容易受到 SQL 注入的影响。考虑使用准备好的语句,而不是直接将值赋给 sql 查询。

这方面的文章很多,这里是我在快速搜索中找到的一篇:

What's the Right Way to Prevent SQL Injection in PHP Scripts?

【讨论】:

【参考方案2】:

试试这个:

function lastId($queryID) 
    sqlsrv_next_result($queryID);
    sqlsrv_fetch($queryID);
    return sqlsrv_get_field($queryID, 0);


$lastInsertedId = lastId($stmt);

【讨论】:

以上是关于获取最后一个插入 id sqlsrv的主要内容,如果未能解决你的问题,请参考以下文章

laravel 8:插入方法在 eloquent 中获取最后一个插入 id(插入方法)

使用学说 2 获取最后一个插入 id?

如何从表中获取最后一个插入 ID

如何在 Eloquent ORM laravel 中获取最后一个插入 ID

之前:获取最后插入的 id - mysql 现在:我们应该在哪里调用最后插入的 id?

为啥我无法在 PHP 和 MySQL 中获取最后一个插入 ID?