這個問題涉及到:檢索插入記錄的ID:PHP和MS SQL SERVER
PHP版本5.3.6
我想正確檢索使用PHP和SQL Server 2005或2008的組合記錄插入的ID。
此問題假定存在下表:
CREATE TABLE users([id] [int] IDENTITY(1,2) NOT NULL,[username] [varchar](50) NOT NULL,[password] [varchar](40) NOT NULL,[first_name] [varchar](30) NOT NULL,[last_name] [varchar](30) NOT NULL)
如果我是運行在Management Studio或通過ASP(經典),記錄將被插入,並會返回一個ID,但相同的行爲似乎不存在以下查詢PHP和這個驅動程序。
INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT @@IDENTITY ;
我需要幫助搞清楚如何正確地或者通過鏈接的SQL語句一起或以任何其他方式拉一個ID。
我已經編寫了一些代碼。
變形例1是一個簡單的選擇(通過查詢) - 無插入或ID retrieveal執行
變形例2是鏈狀的SQL語句,其適當地插入新的記錄,但不返回ID
變異3使用(執行)而不是(查詢)。記錄被插入,但ID不會被返回。這一個產生了一個錯誤,因爲sqlsrv_execute返回true/false而不是記錄集。
那麼,我該如何修改我的代碼來插入記錄並找回ID? (我正在假設這個問題的答案將擴展到返回數據的存儲過程,但也許情況並非如此)
謝謝。
// Database connection
// -------------------------------------------------------------------------------------------------------
$conn = sqlsrv_connect(DB_SERVER,array("UID" => DB_USER, "PWD" => DB_PASSWORD, "Database"=> DB_NAME));
// Variation 1, straight select
// -------------------------------------------------------------------------------------------------------
$sql = "SELECT * FROM users;";
$result = sqlsrv_query($conn,$sql);
$row = sqlsrv_fetch_array($result);
// Variation 2, Insert new record and select @@IDENTITY
// -------------------------------------------------------------------------------------------------------
$sql = "INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT @@IDENTITY ;";
$result = sqlsrv_query($conn,$sql);
$row = sqlsrv_fetch_array($result);
// Variation 3, using EXECUTE instead of QUERY
// -------------------------------------------------------------------------------------------------------
//$sql = "INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT @@IDENTITY as id ;";
$sql = "INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT SCOPE_IDENTITY() as id ;";
$stmt = sqlsrv_prepare($conn, $sql);
$result = sqlsrv_execute($stmt);
$row = sqlsrv_fetch_array($result);
謝謝!這是爲我工作的代碼。 (我不知道如何正確格式化) $ sql =「INSERT INTO users(username,password,first_name,last_name)VALUES('x','x','x','x'); SELECT @@ IDENTITY作爲ID;「 $ result = sqlsrv_query($ conn,$ sql); $ next_result = sqlsrv_next_result($ result); $ row = sqlsrv_fetch_array($ result); –