抓取最后插入id sqlsrv


Grabbing last insert id sqlsrv

我正在编写一个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));
}   

没有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查询中提供值。

有很多关于这个的文章,这是我在快速搜索中找到的一篇:

    什么是正确的方法来防止SQL注入在PHP脚本?

试试这个:

function lastId($queryID) {
    sqlsrv_next_result($queryID);
    sqlsrv_fetch($queryID);
    return sqlsrv_get_field($queryID, 0);
}
$lastInsertedId = lastId($stmt);