gpt4 book ai didi

php - 如何在 PHP 中使用 Microsoft SQL 驱动程序选择 SCOPE_IDENTITY()?

转载 作者:行者123 更新时间:2023-12-02 04:28:56 27 4
gpt4 key购买 nike

我有一个特殊的 MSSQL 语句,用于检索已存在的指定行的标识,或者插入然后检索该标识。此 SQL 似乎在 SQL Management Studio 以及我的几个 .NET C# 应用程序中运行良好。

不幸的是,我被要求使用 PHP 来完成这项特定任务,而我在尝试使用 PHP 和官方 Microsoft SQL 驱动程序时遇到了很大困难。

该语句在插入后不返回 ID(或者如果是,我无法检索它)。有人可以看看我哪里出错了吗?

我使用的是 PHP 5.3.23 和 Microsoft SQL Driver 3.0。这是我的代码:

$sql = ''
. 'IF (SELECT COUNT(*) FROM users WHERE sAMAccountName = ?) = 0 '
. 'BEGIN '
. 'INSERT INTO users (role, sAMAccountName, fullName) '
. 'VALUES (1, ?, ?) '
. 'SELECT SCOPE_IDENTITY() '
. 'END '
. 'ELSE SELECT id FROM users WHERE sAMAccountName = ?';
$params = array($requester, $requester, $fullName, $requester);
$query = $this->SqlQuery($sql, $params);

function SqlQuery($sql, array $params) {
$conn = $this->SqlConnection(null, null, null, null); // x4 null = use default connection options
$query = sqlsrv_query($conn, $sql, $params);
if ($query) {
sqlsrv_fetch($query);
echo 'Result: ' . sqlsrv_get_field($query, 0); // This should return an ID regardless
sqlsrv_close($conn);
}
}

这是结果 HTML(无结果):

Result: 

最佳答案

您需要在查询开头添加SET NOCOUNT ON;

您的INSERT语句实际上返回一些内容:一个空记录集加上消息“(1行受影响)”。 SSMS 只是连接所有记录集,但在 sqlsrv 中,您必须显式前进到第二个记录集才能查看 SCOPE_IDENTITY() 结果。通过关闭行计数功能,无趣的结果集将被取消,它将执行您想要的操作。

关于php - 如何在 PHP 中使用 Microsoft SQL 驱动程序选择 SCOPE_IDENTITY()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24738702/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com