从PHP传递参数到存储过程SQL服务器

时间:2015-08-17 08:45:46

标签: php sql-server stored-procedures parameters sqlsrv

我想将我的参数传递给SQL服务器中的存储过程,但似乎我不能很好地做到这一点

这是我在SQL server中执行过程的php代码

$area = $_GET['area'];
$SQL = "Read_Location_Area";
$result = sqlsrv_query($conn, $SQL);

这是SQL Server过程的脚本

USE [DP_Rozakana]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Read_Location_Area]
as
BEGIN
select * from Locations where Areas = '$area'
END

最后用于从“Locations”表中搜索数据的sql响应,其中区域如$ area(字符串),而不是来自PHP的值

1 个答案:

答案 0 :(得分:0)

首先,您应该查看官方SQLSRV Driver API Reference,您可以找到有关sqlsrv库的所有答案。

现在回答你的问题,

您的$SQL字符串应该像"{CALL [dbo].[Read_Location_Area]}"

但是,您将参数传递给过程,因此您的过程应为:

USE [DP_Rozakana]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[Read_Location_Area]
as
    @area NVARCHAR(MAX) -- type of Areas column
BEGIN
    select *
    from   Locations
    where  Areas = @area
END

然后在php中,您的代码最终看起来像:

$area = $_GET['area'];
$params = array(
    array($area, SQLSRV_PARAM_IN)
);
$SQL = "{CALL [dbo].[Read_Location_Area](?)}";
$result = sqlsrv_query($conn, $SQL, $params);

完成这些步骤后,您应该准备好获取结果。