php - 我无法从存储过程获取记录

标签 php sql sql-server stored-procedures

我无法从存储过程获取记录。如果我从 SQL Server 运行,我会得到记录。如果我从 .NET 调用它,我会获取记录...但如果我从 PHP 调用它,我不会获取记录。

我在 CentOS 6 上使用 PHP 5.3.3。我使用 mssql。其他SP都没问题。

我试过了

$provider = 1010;
$array = array();
$stmt2 = mssql_init("[dbo].[PORA_sp_GET_LetterGenerationRecords]");
mssql_bind($stmt2, "@ProviderID", $provider, SQLINT4);
$letters = mssql_execute($stmt2);
while($row = mssql_fetch_assoc($letters)){
    $array[] = $row;
}
mssql_free_statement($stmt2);
echo '<pre>'; print_r($array); echo '</pre>';

我有

Array
(
)

我也尝试过

$array = array();
$letters = mssql_query('EXEC [dbo].[PORA_sp_GET_LetterGenerationRecords] @ProviderID = 1010');
while($row = mssql_fetch_assoc($letters)){
    $array[] = $row;
}
echo '<pre>'; print_r($array); echo '</pre>';

我得到了

Array
(
)

我包括了

echo 'MSSQL error: '. mssql_get_last_message();

答案:

MSSQL error: 

我很好奇。现在我正在从 PHP 逐步运行 SP。这是一个耻辱。

我尝试过:

    $provider = 1010;
    $array = array();
//    $letters = mssql_query('EXEC [dbo].[PORA_sp_GET_LetterGenerationRecords] @ProviderID = 1010');
    $stmt2 = mssql_init("[dbo].[PORA_sp_GET_LetterGenerationRecords]");
    mssql_bind($stmt2, "@ProviderID", $provider, SQLINT4);
    $letters = mssql_execute($stmt2);
    if($letters){
        echo mssql_num_rows($letters);
        while($row = mssql_fetch_assoc($letters)){
            $array[] = $row;
        }
        mssql_free_statement($stmt2);
        echo '<pre>'; print_r($array); echo '</pre>';
    }
    else{
        echo 'MSSQL error: '. mssql_get_last_message();

        echo error_get_last();
    }

同样的答案。

最佳答案

您的代码看起来不错,但由于某种原因,sql 语句被终止。

所以你需要调试这个,我建议首先尝试让它与硬编码的参数一起工作:

try {
    $array = array();
    $result = mssql_query('EXEC [dbo].[PORA_sp_GET_LetterGenerationRecords] @ProviderID = 1010');
    while ($row = mssql_fetch_assoc($result))
    {
        $array[] = $row;
    }
    var_dump($array);
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
    error_log($e->getMessage());// or log it to a txt file
    echo 'MSSQL error: '. mssql_get_last_message();
    echo 'Last error: '.error_get_last();

}


您还应该运行 SQL 分析器并过滤异常以获得更好的想法。

关于php - 我无法从存储过程获取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20053218/

相关文章:

php - Google Maps API 3 从当前位置从 MySQL 加载标记

sql-server - View 在 Microsoft SQL Server 中占用多少空间

sql-server - SQL Server中有database()函数吗?

SQL 概念 : how many ways to "add" column and row to a result set?

sql - 如何将列名转换为 SQL Server 中的结果值?

php - 如何将 composer 依赖从 require-dev 移动到 require?

php - CURL 登录并提交另一个帖子

php - 将特殊引号转换为常规引号

mysql - SQL甚至显示空记录

带有 xmlagg 函数的 SQL 多 SELECT 查询 - 未以所需方式提取数据