我无法从存储过程获取记录。如果我从 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/