抓住最后一个插入ID sqlsrv

时间:2014-05-06 10:05:17

标签: php sql sql-server sqlsrv

我正在处理一个php代码,我插入两个表并希望从我插入的第一个表中获取id,现在我收到此错误:Call to undefined function sqlsrv_field()。我想从表routine_id中抓取routines

代码:

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));
}   

2 个答案:

答案 0 :(得分:2)

试试这个:

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

$lastInsertedId = lastId($stmt);

答案 1 :(得分:2)

没有名为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查询,而应考虑使用预准备语句。

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