【发布时间】:2011-07-27 19:52:13
【问题描述】:
这个问题涉及到:
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 (Classic) 运行以下查询,将插入一条记录并返回一个 ID,但 PHP 和此驱动程序似乎不存在相同的行为。
INSERT INTO users (username, password, first_name, last_name) VALUES ('x','x','x','x') ; SELECT @@IDENTITY ;
我需要帮助弄清楚如何通过将 SQL 语句链接在一起或通过任何其他方法正确提取 ID。
我已经编写了一些代码。
变体 1 是一个简单的选择(通过查询) - 不执行插入或 ID 检索
变体 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);
【问题讨论】:
标签: php sql-server sql-server-2008 sql-server-2005