在 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 中插入和从存储过程中选择的主要内容,如果未能解决你的问题,请参考以下文章

如何使用存储过程在mysql中选择和插入值

在执行动态插入脚本的情况下,如何在 MSSQL 存储过程中选择新插入的记录?

如何在sql创建一条插入数据的存储过程

mysql存储过程,选择最大值并插入值并分配给变量

MySQL 过程将空结果返回给 PHP

我可以在存储过程中使用 if 语句将值插入到表中吗?