将 way/location 更正为使用 Scope_Identity()
Correct way/location to use Scope_Identity()
我的一个字段中有一个名为 deviceID 的自动递增 ID。我想将其传递给 php 中的会话以供稍后使用,并计划使用 scope_identity()
,因为我知道这是获取当前主键 ID 的最佳方式。但是,每当我尝试使用它时,都会收到一条错误消息,指出它是一个未定义的函数。这是我的代码,所以没有 scope_identity()
:
<?php
session_start();
include 'db.php';
$screenWidth = $_POST['screenWidth'];
$screenHeight = $_POST['screenHeight'];
$HandUsed = $_POST['HandUsed'];
$_SESSION["screenWidth"] = $screenWidth;
$_SESSION["screenHeight"] = $screenHeight;
if (isset($_POST['submit'])) {
$screenWidth = $_POST['screenWidth'];
$screenHeight = $_POST['screenHeight'];
$phoneType = $_POST['phoneName'];
$HandUsed = $_POST['HandUsed'];
$_SESSION["HandUsed"] = $HandUsed;
$_SESSION["phoneName"] = $phoneType;
echo 'hello';
$sql = "
INSERT INTO DeviceInfo (DeviceID, screenWidth, phoneType, screenHeight, HandUsed)
VALUES ('$screenWidth','$phoneType', '$screenHeight', '$HandUsed')
SELECT SCOPE_IDENTITY() as DeviceID
";
if (sqlsrv_query($conn, $sql)) {
echo ($sql);
echo "New record has been added successfully !";
} else {
echo "Error: " . $sql . ":-" . sqlsrv_errors($conn);
}
sqlsrv_close($conn);
}
?>
您需要修复代码中的一些问题:
INSERT
语句是错误的 - 您有五列,但此语句中只有四个值。我假设 DeviceID
是标识列,因此从列列表中删除此列。
- 在您的语句中使用参数。函数
sqlsrv_query()
同时进行语句准备和语句执行,可用于执行参数化查询。
- 使用
SET NOCOUNT ON
作为语句的第一行,以防止 SQL 服务器将受影响的行数作为结果集的一部分传递。
SCOPE_IDENTITY()
使用正确,它应该 return 预期的 ID
。当然,根据需要,你可以使用IDENT_CURRENT()
.
以下示例(基于问题中的代码)是一个可行的解决方案:
<?php
session_start();
include 'db.php';
if (isset($_POST['submit'])) {
$screenWidth = $_POST['screenWidth'];
$phoneType = $_POST['phoneName'];
$screenHeight = $_POST['screenHeight'];
$HandUsed = $_POST['HandUsed'];
$params = array($screenWidth, $phoneType, $screenHeight, $HandUsed);
$sql = "
SET NOCOUNT ON
INSERT INTO DeviceInfo (screenWidth, phoneType, screenHeight, HandUsed)
VALUES (?, ?, ?, ?)
SELECT SCOPE_IDENTITY() AS DeviceID
";
$stmt = sqlsrv_query($conn, $sql, $params);
if ($stmt === false) {
echo "Error: " . $sql . ": " . print_r(sqlsrv_errors());
exit;
}
echo "New record has been added successfully !";
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
echo $row["DeviceID"];
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
}
?>
我的一个字段中有一个名为 deviceID 的自动递增 ID。我想将其传递给 php 中的会话以供稍后使用,并计划使用 scope_identity()
,因为我知道这是获取当前主键 ID 的最佳方式。但是,每当我尝试使用它时,都会收到一条错误消息,指出它是一个未定义的函数。这是我的代码,所以没有 scope_identity()
:
<?php
session_start();
include 'db.php';
$screenWidth = $_POST['screenWidth'];
$screenHeight = $_POST['screenHeight'];
$HandUsed = $_POST['HandUsed'];
$_SESSION["screenWidth"] = $screenWidth;
$_SESSION["screenHeight"] = $screenHeight;
if (isset($_POST['submit'])) {
$screenWidth = $_POST['screenWidth'];
$screenHeight = $_POST['screenHeight'];
$phoneType = $_POST['phoneName'];
$HandUsed = $_POST['HandUsed'];
$_SESSION["HandUsed"] = $HandUsed;
$_SESSION["phoneName"] = $phoneType;
echo 'hello';
$sql = "
INSERT INTO DeviceInfo (DeviceID, screenWidth, phoneType, screenHeight, HandUsed)
VALUES ('$screenWidth','$phoneType', '$screenHeight', '$HandUsed')
SELECT SCOPE_IDENTITY() as DeviceID
";
if (sqlsrv_query($conn, $sql)) {
echo ($sql);
echo "New record has been added successfully !";
} else {
echo "Error: " . $sql . ":-" . sqlsrv_errors($conn);
}
sqlsrv_close($conn);
}
?>
您需要修复代码中的一些问题:
INSERT
语句是错误的 - 您有五列,但此语句中只有四个值。我假设DeviceID
是标识列,因此从列列表中删除此列。- 在您的语句中使用参数。函数
sqlsrv_query()
同时进行语句准备和语句执行,可用于执行参数化查询。 - 使用
SET NOCOUNT ON
作为语句的第一行,以防止 SQL 服务器将受影响的行数作为结果集的一部分传递。 SCOPE_IDENTITY()
使用正确,它应该 return 预期的ID
。当然,根据需要,你可以使用IDENT_CURRENT()
.
以下示例(基于问题中的代码)是一个可行的解决方案:
<?php
session_start();
include 'db.php';
if (isset($_POST['submit'])) {
$screenWidth = $_POST['screenWidth'];
$phoneType = $_POST['phoneName'];
$screenHeight = $_POST['screenHeight'];
$HandUsed = $_POST['HandUsed'];
$params = array($screenWidth, $phoneType, $screenHeight, $HandUsed);
$sql = "
SET NOCOUNT ON
INSERT INTO DeviceInfo (screenWidth, phoneType, screenHeight, HandUsed)
VALUES (?, ?, ?, ?)
SELECT SCOPE_IDENTITY() AS DeviceID
";
$stmt = sqlsrv_query($conn, $sql, $params);
if ($stmt === false) {
echo "Error: " . $sql . ": " . print_r(sqlsrv_errors());
exit;
}
echo "New record has been added successfully !";
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
echo $row["DeviceID"];
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
}
?>