【问题标题】:Using SQL Server stored procedures with empty resultsets in PHP 5.4在 PHP 5.4 中使用带有空结果集的 SQL Server 存储过程
【发布时间】:2013-05-14 09:37:52
【问题描述】:

我使用带有 Microsoft 3.0 驱动程序的 PHP 5.4 在 SQL Server 2008 中执行存储过程。它工作正常,直到我执行一个不返回任何结果的过程,因为它只是在执行更新。我得到的错误信息是:

SQLSTATE[IMSSP]: The active result for the query contains no fields.

不工作的过程归结为这个简单的代码:

CREATE PROCEDURE [dbo].[sp_communication_increase_trials]
    @comId bigint = NULL
AS
BEGIN

    SET NOCOUNT ON

    IF NOT @comId IS NULL
    BEGIN
        UPDATE Communication SET CommunicationTrials = CommunicationTrials + 1 WHERE id = @comId;
    END;

END

执行上述过程时,fetchAll 方法处的 PHP 代码错误:

if ($stmt->execute()) {
    do {
        $rowset = $stmt->fetchAll(PDO::FETCH_ASSOC);
        if ($rowset) {
            $results[] = $rowset;
        }
    } while ($stmt->nextRowset());

}
return $results;

但是,在过程中的更新语句之后添加一个简单的选择可以使其工作,但这不是必需的。

【问题讨论】:

    标签: php sql-server stored-procedures pdo


    【解决方案1】:

    我想出的解决方案是向正在执行过程并返回结果的方法添加一个布尔值作为参数,以指示是否需要返回结果集。布尔值默认设置为TRUE,除非明确指定为FALSE

    这样fetchAll 方法在被告知不调用时不会被调用。

    if ($stmt->execute() && $do_return_rowsets) {
        do {
            $rowset = $stmt->fetchAll(PDO::FETCH_ASSOC);
            if ($rowset) {
                $results[] = $rowset;
            }
        } while ($stmt->nextRowset());
    
    } 
    

    PHP 代码和过程之间的约定指定是否返回行集可能并不公平。

    【讨论】:

      猜你喜欢
      • 2012-01-15
      • 2011-08-31
      • 2021-01-26
      • 1970-01-01
      • 2010-09-08
      • 2012-09-05
      • 1970-01-01
      • 2014-12-07
      • 2018-07-13
      相关资源
      最近更新 更多