【问题标题】:What is the return value after a successful INSERT using sqlsrv_query() in PHP, MSSQL SERVER 2005?在 PHP、MSSQL SERVER 2005 中使用 sqlsrv_query() 成功插入后的返回值是多少?
【发布时间】:2023-03-10 06:06:01
【问题描述】:

使用以下简单代码:

$aQuery = "INSERT into myTable (a, b, c) VALUES (1, 'Hello', 'Goodbye')";
$result = sqlsrv_query($myConn, $aQuery ); //where $myConn is valid and defined elsewhere
if (!$result) {
    echo 'FAIL';
}
else {
    echo 'It worked BABY!';
}

如果查询执行成功,$result 的值是多少,如何正确访问资源? echo $result; 将打印:Resource id #8

【问题讨论】:

    标签: php sql-server sql-server-2005


    【解决方案1】:

    查询失败时$result == false

    所以在你的代码中:

    if (!$result) { //if result is NOT true
        echo 'FAIL'; //it failed
    }
    else { //otherwise
        echo 'It worked BABY!'; //it did NOT fail
    }
    

    任何不是false0 的值都被视为true


    基于以下 cmets 的附录。

    只有SELECT 返回内容。

    【讨论】:

    • 我明白这一点。我想要的是如何访问变量 $result 中的数据,当它没有失败时(因为它失败时的值为 false)。
    • @David Weitz - 我查看了那里的文档,但没有看到在成功插入后如何利用返回的资源语句。
    • 当它没有失败时,sqlsrv_query 只会返回一个资源 ID。它实际上并不包含查询的结果。对于 INSERT 查询,您要检查 sqlsrv_rows_affected()。 msdn.microsoft.com/en-US/library/cc296178(v=SQL.90).aspx
    • @neal - 似乎是这样。如果您将其添加到答案中,那将是最正确的答案。 (换句话说,INSERT 语句的返回值不能真正用于除了验证失败之外的任何事情,如我的示例所示)。
    • @LittleTreeX ...您什么时候曾经看到插入返回任何东西??
    【解决方案2】:

    我认为 $result 的技术术语是 PHP “语句资源”(参见:http://msdn.microsoft.com/en-us/library/cc793139(v=sql.90).aspx),它是“数据库返回的任何内容”的花哨名称。

    所以 $result 将包含 SQL Server 为插入语句返回的任何内容。我认为这是查询中受影响的一些记录,但我不确定。如果你想返回一些不同的东西,比如你刚刚插入的记录的主键,你可能需要调用一个存储过程而不是仅仅发送一个插入语句。

    【讨论】:

    • 是的,但是这个资源通常不是一个简单的字符串,并且在 select 语句之后用于访问它的方法似乎不起作用。
    • 我看到了你的困境。 get_resource_type() 是否为您提供任何有用的信息? php.net/manual/en/function.get-resource-type.php
    【解决方案3】:

    来自Geeks With Blogs的示例

    while($row = sqlsrv_fetch_array($result))
    {
        echo($row['ID'] . ', '.
         $row['Title'] . ', '.
         $row['Name']);
    }
    

    其中 ID、Title 和 Name 是表中的列

    【讨论】:

    • 我试过这个,但是在 INSERT 之后这似乎没有做任何事情。换句话说,while 循环永远不会执行。这完美地工作,但是对于 SELECT 语句。
    • 对不起,我的错误。我认为下面 jeremy 的答案是您将得到的最接近的答案,没有在 $result 变量上尝试 var_dump() 而不是 echo 并查看它返回的任何对象是否有任何用处
    • var_dump() 似乎证实了其他人的说法。 INSERT 的返回值是无用的。感谢您的建议。
    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多