передача параметров хранимой процедуре SQL-серверу из PHP

я хочу передать свои параметры в хранимую процедуру на сервере SQL, но похоже, что я не могу сделать это красиво

это мой php-код для выполнения процедуры на сервере SQL

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

и это скрипт для процедуры SQL-сервера

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

наконец, ответ sql для поиска данных из таблицы «Местоположения», где такие области, как $area (строка), а не значение из PHP


person Dack-Pro    schedule 17.08.2015    source источник
comment
вам нужно передать параметр в процедуру. используйте sqlsrv_query в php, и ваша процедура должна иметь параметр, который должен быть используется внутри   -  person ughai    schedule 17.08.2015
comment
Сначала узнайте, как создать хранимую процедуру с параметрами   -  person RiggsFolly    schedule 17.08.2015
comment
вероятно, дубликат Как вызвать сохраненный процедура с использованием PHP и SQL Server   -  person SouthL    schedule 17.08.2015
comment
Затем узнайте, как вызывать хранимая процедура с параметрами   -  person RiggsFolly    schedule 17.08.2015
comment
@SouthL Вероятно, нет, так как это не говорит о параметрах   -  person RiggsFolly    schedule 17.08.2015


Ответы (1)


Во-первых, вы должны проверить официальный Справочник API драйвера SQLSRV, вы можете найти все ответы о 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);

После этих шагов вы должны быть готовы получить результаты.

person alpakyol    schedule 17.08.2015