0

我使用带有 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;

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

4

1 回答 1

0

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

这样,fetchAll当被告知不要时,不会调用该方法。

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

} 

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

于 2013-05-20T07:04:21.873 回答