实际上我想到了这样的场景:
假设我们正在管理一个存储许多书籍的图书馆。
我们的图书馆网络应用程序允许用户将书籍添加到书架上。
该数据库有两个表,书籍和作者。架构是这样的:
CREATE TABLE Books
(book_id int NOT NULL IDENTITY(1,1),
book_name nvarchar(100) NOT NULL,
author_id int NOT NULL,
PRIMARY KEY (book_id),
FOREIGN KEY ( author_id ) REFERENCES Authors(author_id),)
CREATE TABLE Authors
(author_id int NOT NULL IDENTITY(1,1),
author_name nvarchar(100) NOT NULL,
PRIMARY KEY (author_id))
假设请求将获取作者姓名和书名以将书存储在书架上。
如果没有这样的作者,它将自动生成作者条目。但我希望这个操作成为一个事务。(如果出现问题,我希望一切都回滚。)
我可以在像这样结束事务之前获取主键吗?
$server_name = "s3";
$connection_info = array( "Database"=>"bis_testing", "UID"=>"bisuser", "PWD"=>"111");
$conn = sqlsrv_connect( $server_name, $connection_info);
sqlsrv_begin_transaction( $conn )
$sql = "INSERT INTO Author(author_name)
values
(?);";
$author_name = 'Dr. Pro';
$stmt1 = sqlsrv_query( $conn, $sql, array($brand_name));
**// get author primary key to $author_pk**
$sql = "INSERT INTO Book(book_name, author_id)
values
(?,?);";
$book_name = 'Writing that works';
$stmt2 = sqlsrv_query( $conn, $sql, array($book_name, $author_pk));
if ($stmt1 && $stmt2) {
echo 'done';
}
如果没有,我应该如何做这项工作?