当前位置: 首页 > 面试题库 >

检索插入的记录的ID:Php和MS SQL SERVER

魏英勋
2023-03-14
问题内容

这个问题涉及:

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);


 类似资料:
  • 有一列我想检索并插入到另一个表中例如,下面是我想检索值的第一个表 我使用MSSQL2008

  • 配置数据库后,我们可以使用select方法使用DB facade检索记录。 select方法的语法如下表所示。 Syntax 数组选择(字符串$ query,array $ bindings = array()) Parameters $ query(string) - 在数据库中执行的查询 $ bindings(array) - 要与查询绑定的值 Returns array Descriptio

  • OrientDB是一个NoSQL数据库,可以存储文档和面向图形的数据。 NoSQL数据库不包含任何表,那么要如何将数据作为记录插入?在这里,您可以以类,属性,顶点和边的形式查看表数据,类表就像表,属性就像表中的文件。 可以在OrientDB中使用模式定义所有这些实体。 属性数据可以被插入到一个类中。 插入命令在数据库模式中创建一条新记录。 记录可以无模式或遵循一些指定的规则。 以下语句是“插入记录

  • > 在我的视图中,我可以输出,如下所示: 我可以遍历,比如: 但是是否可以迭代(我知道只有一个-- ,请参见#2),并且对于每个迭代他们的? 我想我的模特关系中有什么不对劲的地方。我还尝试用在Artist.php中定义关系(我认为说“每个艺术家都有许多乐器”更有意义,但这给了我一个错误,因为它需要一个名为的表,而且它还试图检索该表中不存在的列(比如)。

  • 我想从我的学生表中检索最后插入的id并传递到视图。但我不知道怎么做?我使用以下代码在表中插入数据。 有人能帮帮我吗?

  • 问题内容: 我正在尝试将Envers集成到我的项目中。我正在使用Hibernate-envers 3.5.5-Final,Hibernate-core 3.5.5-Final,spring 3.0.7.RELEASE。 对于DAO层,我使用的是GenericDaoHibernate类。 我的applicationContext.xml包含: 创建带注释的类的审核表,但是通过在实体表中添加或更新一行