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

时间:2013-11-18 16:51:34

标签: 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();
    }

和同样的答案。

2 个答案:

答案 0 :(得分:2)

您的代码看起来很好,但由于某种原因,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事件探查器并对异常进行过滤以获得更好的想法。

答案 1 :(得分:0)

<?php
   $query = "EXEC [dbo].[PORA_sp_GET_LetterGenerationRecords] @ProviderID = 1010";
   $result = mssql_query($query);
   if (!$result) {
       die('Invalid query: ' . mssql_error());
   }

   while ($row = @mssql_fetch_assoc($result)) {
        echo $row['col1']
   }
?>