【发布时间】:2013-12-01 22:10:20
【问题描述】:
我无法从存储过程中获取记录。如果我从 SQL Server 运行,我会得到记录。如果我从 .NET 调用它,我会得到记录……但如果我从 PHP 调用它,我不会得到记录。
我在 CentOS 6 上使用 PHP 5.3.3。我使用的是 mssql。其他SP都ok。
我试过了
$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();
}
同样的答案。
【问题讨论】:
-
那么如果你在 PHP 中使用相同的代码执行
SELECT * FROM whatever,它会返回一个结果集? -
当我在 PHP 中运行所有内容时,运行正常。这个 SP 很复杂,因为它从一些表中获取数据并用这些数据创建一个临时表。
-
澄清一下,如果您在管理工作室或其他任何地方执行
EXEC [dbo].[PORA_sp_GET_LetterGenerationRecords] @ProviderID = 1010,它可以正常工作吗? (而不是在过程中执行代码) -
是的。如果我从 .NET 调用 SP,它也可以正常工作。
-
为避免混淆,在最后一个示例中(以 $provider = 1010; 开头),您在 if 中缺少一个“s”。 $字母与$字母。我不知道 $letter 是否可以但超出范围。
标签: php sql sql-server stored-procedures