【问题标题】:Correct way/location to use Scope_Identity()正确使用 Scope_Identity() 的方式/位置
【发布时间】:2020-04-12 16:42:30
【问题描述】:

我的一个字段中有一个名为 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);
}
?>

【问题讨论】:

  • 这能回答你的问题吗? Get SCOPE_IDENTITY() in PHP
  • 您需要向我们展示您的代码 with scope_identity(),以便我们告诉您您做错了什么。
  • 嗨,我尝试了 SMor 提供的链接上的更改,但没有成功 - 我将其添加到编辑中,谢谢
  • @b.man 你能发布确切的错误信息吗?谢谢。

标签: php sql-server sqlsrv scope-identity


【解决方案1】:

您需要修复代码中的一些问题:

  • INSERT 语句错误 - 您有五列,但该语句中只有四个值。我假设 DeviceID 是一个标识列,因此请从列列表中删除此列。
  • 在语句中使用参数。函数sqlsrv_query()既做语句准备又做语句执行,可用于执行参数化查询。
  • 在语句中使用SET NOCOUNT ON 作为第一行,以防止 SQL Server 将受影响的行数作为结果集的一部分传递。
  • 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);
}
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    相关资源
    最近更新 更多