获取最后一个插入 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(插入方法)
如何在 Eloquent ORM laravel 中获取最后一个插入 ID