【发布时间】:2016-06-20 13:11:36
【问题描述】:
我正在尝试执行一个 SQL 过程并在 php.ini 中返回值。我的代码如下:
<?PHP
include "conn.php";
$myquery= "exec CR_Report @System='Automated Forms'";
$fetched=sqlsrv_query($conn,$myquery);
if( $fetched === false ) { die( print_r( sqlsrv_errors(), true ));}
while($res=sqlsrv_fetch_array($fetched,SQLSRV_FETCH_ASSOC))
{
echo $res['ID'];
}
?>
程序:
CREATE procedure [dbo].[CR_Report]
@Department varchar(60) = Null,
@System varchar(30) = Null,
@Fromdate date = Null,
@Todate date = Null
AS
IF @System is Null and
@Fromdate is Null and
@Todate is Null
BEGIN
Create table #Temp_ConfigRequest_Department
(
ID int,
Form_No varchar(25),
App_Date smalldatetime,
System varchar(30)
)
delete #Temp_ConfigRequest_Department
insert into #Temp_ConfigRequest_Department
SELECT * FROM [SUAF].[dbo].[Config_Request] where Admin_Department = @Department
select * from #Temp_ConfigRequest_Department
DROP TABLE #Temp_ConfigRequest_Department
end
IF @Department is Null and
@Fromdate is Null and
@Todate is Null
BEGIN
Create table #Temp_ConfigRequest_System
(
ID int,
Form_No varchar(25),
App_Date smalldatetime,
System varchar(30)
)
delete #Temp_ConfigRequest_System
insert into #Temp_ConfigRequest_System
SELECT * FROM [SUAF].[dbo].[Config_Request] where System = @System
select * from #Temp_ConfigRequest_System
DROP TABLE #Temp_ConfigRequest_System
end
IF @Department is NULL and
@System is NULL
BEGIN
Create table #Temp_ConfigRequest_Date
(
ID int,
Form_No varchar(25),
App_Date smalldatetime,
System varchar(30)
)
delete #Temp_ConfigRequest_Date
insert into #Temp_ConfigRequest_Date
SELECT * FROM [SUAF].[dbo].[Config_Request] where convert(date, App_Date, 103) Between @Fromdate and @Todate
select * from #Temp_ConfigRequest_Date
DROP TABLE #Temp_ConfigRequest_Date
end
IF @Department is not Null and
@System is not Null and
@Fromdate is not Null and
@Todate is not Null
BEGIN
Create table #Temp_ConfigRequest_All
(
ID int,
Form_No varchar(25),
App_Date smalldatetime,
System varchar(30)
)
delete #Temp_ConfigRequest_All
insert into #Temp_ConfigRequest_All
SELECT * FROM [SUAF].[dbo].[Config_Request] where convert(date, App_Date, 103) Between @Fromdate and @Todate and Admin_Department = @Department and System = @System
select * from #Temp_ConfigRequest_All
DROP TABLE #Temp_ConfigRequest_All
end
它不返回任何值,并且错误日志中也没有记录任何错误。我尝试在数据库中测试 sql 查询,它确实返回了记录。为了测试连接,我在同一个文件中为另一个过程编写了代码,它正在返回值。第二个代码如下:
<?PHP
$myquery="exec Configuration_Request @IDtemp='4275'";
$fetched=sqlsrv_query($conn,$myquery) ;
if( $fetched === false ) { die( print_r( sqlsrv_errors(), true ));}
while($res=sqlsrv_fetch_array($fetched,SQLSRV_FETCH_ASSOC))
{
echo $res['Form_No'];
echo $res['Administrator'];
}
?>
程序:
create procedure Configuration_Request (@IDtemp int)
as
begin
select * from Config_Request where ID=@IDtemp
end
问题出在哪里?为什么第一个代码没有返回任何值?非常感谢任何帮助/建议。
【问题讨论】:
-
第一个存储过程中的查询是否返回一个名为“ID”的列?
-
@SimonSellick 是的.. :)
-
我不是 PHP 专家,但除了存储的 proc 名称之外,我能看到的唯一区别是第二个示例不包括 conn.php。 (另外,缩进看起来有点乱,不影响执行。)如果没有人提出更好的建议,你能发布两个存储过程的源代码吗?
-
@SimonSellick 它们都在同一个文件中,这就是为什么第二个不包含 conn.php 的原因。我可以发布它.. 但它们都在 sql server 中执行时工作..
-
天啊....这个过程是一个很好的例子,可以避免复杂化的事情。你为什么要创建一个临时表,然后立即删除它?然后你做一个简单的插入,然后选择刚刚插入的数据,然后删除临时表。这应该比一个简单的 select 语句更复杂。
标签: php sql-server stored-procedures