2014-07-11 49 views
0

我有一個問題,我試圖獲取最後插入的行的主鍵(VisitID)。sqlsrv_get_field沒有返回ID

無論何時運行查詢,數據庫都會更新,但sqlsrv_get_field永遠不會返回VisitID。我應該使用sqlsrv_query而不是sqlsrv_prepare還是有什麼我完全失蹤?

$addvisitquery = " 
     INSERT INTO blah; 
    SELECT SCOPE_IDENTITY() AS VisitID"; 

    $addVisit = sqlsrv_prepare($connect,$addvisitquery); 

    if(sqlsrv_execute($addVisit)) 
     { 
      echo "Statement executed.\n <br />"; 
      echo "Number of rows updated:".sqlsrv_rows_affected($addVisit)." <br />"; 
      sqlsrv_next_result($addVisit)." <br />"; 
      sqlsrv_fetch($addVisit); 

      echo "Returned VisitID:".sqlsrv_get_field($addVisit, 0)." <br />"; 

      sqlsrv_commit($connect); 
+0

什麼的''
旁邊的功能'sqlsrv_next_result($ addVisit)'的目的是什麼?該行沒有打印或回顯命令,所以我想它會阻止該功能成功執行。 – alalp

回答

0

我在這裏找到了答案:http://blogs.msdn.com/b/nickhodge/archive/2008/09/23/sql-server-driver-for-php-last-inserted-row-id.aspx

很簡單,確保你的SQL語句有以下返回最後插入的行:

; SELECT SCOPE_IDENTITY() 

創建一個PHP函數:

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

然後添加此行以查詢函數:

echo "The last inserted row ID is ".lastInsertId($addVisit); 
+1

與原始代碼有什麼區別?乍一看,他們看起來很相似: - ? –