繁体   English   中英

正确使用 Scope_Identity() 的方式/位置

[英]Correct way/location to use Scope_Identity()

我的一个字段中有一个名为 deviceID 的自动递增 ID。 我想将此传递给 php 中的 session 以供以后使用,并计划使用scope_identity()因为我知道这是获取当前主键 ID 的最佳方法。 但是,每当我尝试使用它时,我都会收到一条错误消息,指出它是未定义的 function。 这是我的代码,所以没有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是一个标识列,因此从列列表中删除此列。
  • 在您的语句中使用参数。 Function sqlsrv_query()既做语句准备又做语句执行,可用于执行参数化查询。
  • 使用SET NOCOUNT ON作为语句中的第一行,以防止 SQL 服务器将受影响的行数作为结果集的一部分传递。
  • SCOPE_IDENTITY()使用正确,它应该返回预期的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);
}
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM