这个问题涉及: PHP版本5.3.6 适用于SQL Server的PHP的Microsoft驱动程序
这个问题涉及:
PHP版本5.3.6
适用于SQL Server的PHP的Microsoft驱动程序
我正在尝试使用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检索
变体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);
http://www.php.net/manual/zh/function.mssql- query.php#104263
我根本不使用MS SQL,但已对此进行了简要阅读。似乎您需要调用sqlsrv_next_result。该注释中提供了一个示例:
$query = "INSERT INTO test (col1, col2) VALUES (?,?); SELECT SCOPE_IDENTITY()"; $resource=sqlsrv_query($conn, $query, $arrParams); sqlsrv_next_result($resource); sqlsrv_fetch($resource); echo sqlsrv_get_field($resource, 0);