簡體   English   中英

如果我的存儲過程 function 只返回一個結果,我該如何返回多個結果?

[英]How do I return multiple results from my Stored Procedure function if it returns only one result?

我現在有一個使用 SQL Server 2017 的應用程序。當我在 SSMS 上執行存儲過程時,它會顯示所有數據。 但是,在 PHP 上,當我執行它時,它只顯示出現的第一個數據。

這是命令:

EXEC dbo.SP_Get_Books_Archive;

SQL 服務器結果

我使用的存儲過程:

CREATE PROCEDURE SP_Get_Books_Archive
AS
BEGIN
SELECT 
   Book_ISBN as ISBN, 
   Book_Name, Book_Author, 
   Category_Name, 
   Book_Status, 
   Book_Copies_Current, 
   Book_Copies_Actual 
FROM Book 
LEFT JOIN Book_Category ON (Book.Book_Category_ID = Book_Category.Category_ID)
END

PHP 我正在使用的代碼:

<?php
$connection = sqlsrv_connect($server, $connectionInfo);
$query = "EXEC SP_Get_Books_Archive";
$statement = sqlsrv_prepare($connection, $query);
$result = sqlsrv_execute($statement);
$row = sqlsrv_fetch_array($statement);
$rowCount = 1;

var_dump($row);
if (count($row) > 0) {
    foreach ($row as $key => $value) {
        if ($key == 'ISBN') {
            echo "<tr>";
            echo "<td>" . $value . "</td>";
        } else if ($key == 'Book_Name') {
            echo "<td>" . $value . "</td>";
        } else if ($key == 'Book_Author') {
            echo "<td>" . $value . "</td>";
        } else if ($key == 'Category_Name') {
            echo "<td>" . $value . "</td>";
        } else if ($key == 'Book_Status') {
            echo "<td>" . $value . "</td>";
        } else if ($key == 'Book_Copies_Current') {
            echo "<td>" . $value . "</td>";
        } else if ($key == 'Book_Copies_Actual') {
            echo "<td>" . $value . "</td>";
        }
        if ($rowCount == count($row)) {
            echo "</tr>";
        }
        $rowCount++;
    }
}

(注意:這包含在<?php include(get_books.php)?>位於另一個 php 文件中的代碼中。嘗試不將其分開但無濟於事)

結果只說: 第二個圖像 PHP 結果

我還嘗試在$query上執行完整的SELECT...腳本,但結果相同。 我的 PHP 代碼有問題還是我錯過了 SQL 服務器錯誤?

這與這篇文章有些相似,但我認為答案不是我的問題。

您需要獲取所有數據:

while ($row = sqlsrv_fetch_array($statement, SQLSRV_FETCH_ASSOC)) {
   ...
}

作為附加說明,您需要檢查每個sqlsrv_調用的結果。 一個示例,基於您的代碼:

<?php
// Connection
$connection = sqlsrv_connect($server, $connectionInfo);
if ($connection === false ) {
    echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
    exit;
}

// Statement
$query = "EXEC SP_Get_Books_Archive";
$statement = sqlsrv_prepare($connection, $query);
if ($statement === false) {
    echo "Error (sqlsrv_prepare): ".print_r(sqlsrv_errors(), true);
    exit;
}   

// Execution
$result = sqlsrv_execute($statement);
if ($result === false) {
    echo "Error (sqlsrv_execute): ".print_r(sqlsrv_errors(), true);
    exit;
}   

// Fetch data
$rowCount = 0;
while ($row = sqlsrv_fetch_array($statement, SQLSRV_FETCH_ASSOC)) {
    $rowCount++;
    echo "<tr>";
    foreach ($row as $key => $value) {
        if ($key == 'ISBN') {
            echo "<td>" . $value . "</td>";
        } else if ($key == 'Book_Name') {
            echo "<td>" . $value . "</td>";
        } else if ($key == 'Book_Author') {
            echo "<td>" . $value . "</td>";
        } else if ($key == 'Category_Name') {
            echo "<td>" . $value . "</td>";
        } else if ($key == 'Book_Status') {
            echo "<td>" . $value . "</td>";
        } else if ($key == 'Book_Copies_Current') {
            echo "<td>" . $value . "</td>";
        } else if ($key == 'Book_Copies_Actual') {
            echo "<td>" . $value . "</td>";
        }
    }
    echo "</tr>";
}

// End
sqlsrv_free_stmt($statement);
sqlsrv_close($connection);
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM