在 PHP 中插入和从存储过程中选择
Posted
技术标签:
【中文标题】在 PHP 中插入和从存储过程中选择【英文标题】:Insert and Select from Stored Procedure in PHP 【发布时间】:2013-07-08 19:14:42 【问题描述】:我目前正在尝试通过 php 执行一个存储过程(两个 INSERTS 和一个 SELECT)。存储过程有效(不会引发错误)。这些值甚至被插入到给定的表中。我们将结果存储在 JSON 对象中,但它返回一个空数组。当我们执行只包含一个 SELECT 的存储过程时,它会返回正确的值。我们表中的所有名称都已更改(可能遗漏了一些但我们的代码运行)。谁能解释为什么我们的数组没有填充?
这是我们的存储过程
ALTER procedure
As
BEGIN
INSERT INTO TABLE1
(Loan_ID, Doc_ID, Borrower_Name, Docs_Drawn, Funder, First_Payment, Interest_Rate, Loan_Amount)
Select Loan_ID,
(SELECT (COUNT(*)) FROM TABLE WHERE A.Loan_ID = Loan_ID) AS Doc_ID,
Borrower ,[Date_Docs_Drawn]
,[Funder]
,[Payment_Date]
,[Interest_Rate]
,[Loan_Amount] from VIEW A
INSERT INTO TABLE2
(Loan_ID, Submitted_By, Event_Class, Event_Type, Event_Date, Doc_ID)
SELECT A.[Loan_ID],
'Program' AS Submitted_By
,'Collateral' AS Event_Class
, 'Outstanding' AS Event_Type
, CURRENT_TIMESTAMP AS Event_Date
, Doc_ID
FROM TABLE1 AS A
WHERE NOT (A.Loan_ID = ANY (SELECT Loan_ID FROM TABLE2))
SELECT [Loan_ID],[Doc_ID],[Borrower_Name]
,[Funder]
,[Docs_Drawn]
,[First_Payment]
,[Loan_Amount]
,[Interest_Rate]
FROM TABLE1
WHERE Loan_ID <> ALL
(SELECT Loan_ID FROM TABLE2
WHERE Event_Type <> 'Outstanding')
ORDER BY Funder
END
这是我们 PHP 的粗略草图
$query = "exec storedProcedure";
$result=sqlsrv_query($conn, $query);
$table = array();
while($row = sqlsrv_fetch_array($result))
$table[] = $row;
echo json_encode($table);
【问题讨论】:
【参考方案1】:尝试在您的存储过程中使用SET NOCOUNT ON
。您可能受到 SQL Server PHP 驱动程序返回给 PHP 的结果的限制,因此您无法从 SELECT 语句中获取数据。
【讨论】:
非常感谢 AToya!有效!我自己对 SET NOCOUNT 进行了一些研究,看起来在所有存储过程中都设置 NOCOUNT ON 是一种常见的做法,以避免像这样的错误 =D。这篇文章很有帮助。 ***.com/questions/1483732/set-nocount-on-usage以上是关于在 PHP 中插入和从存储过程中选择的主要内容,如果未能解决你的问题,请参考以下文章