Как выполнить хранимую процедуру Mssql с выходным параметром на PDO (драйвер ODBC)?

Я использовал ODBC Driver (на хосте) и sqlsrv Driver (на локальном) для PDO.
Успешно вставил данные таблицы, но я не обработал выходной параметр, я попробовал это;

  1. $ Query-> выборки (PDO :: FETCH_ASSOC);
  2. $ db-> query («SELECT @Result») -> fetch (PDO :: FETCH_ASSOC);
  3. $ Sp_result;

Хранимая процедура MSSQL:

ALTER PROCEDURE [dbo].[sp_Uye_Insert](
--Uye
@Result varchar(250) OUTPUT,
@Tckn nvarchar(11),
@Adi nvarchar(50),
@Soyadi nvarchar(50),
@BabaAdi nvarchar(50),
@AnaAdi nvarchar(50),
@DogumTarihi date,
@DogumYeri nvarchar(250),
@Cinsiyet char(1),
@OgrenimDurumId int,
@KurumSicil nvarchar(50),
@KadroUnvanId int,
@Eposta nvarchar(250),
@Telefon nvarchar(250),
@KanGrubu nvarchar(50),
@BransId int,
@UyeDurumId int,
@CreatedIpAdress nvarchar(50),
@KayitFormu nvarchar(max),
@CreatedUser int,

-- UyeKurum
@IlId int,
@IlceId int,
@KurumId int,
@BirimId int,

--UyeSosyalGuvenlik
@SosyalGuvenlikKurumuId int,
@SosyalGuvenlikSicilNumarasi int
)
AS
BEGIN

DECLARE @UyeId int
DECLARE @KararNoId int
DECLARE @KararNo int
DECLARE @KayitNo int
DECLARE @UyeNo int
DECLARE @Date date
DECLARE @UyeHareketString nvarchar(max)

SET @Date = GETDATE()
SET @UyeHareketString = 'TCKN: '+@Tckn+',Adi:'+@Adi+',Soyadi:'+@Soyadi+',BabaAdi:'+@BabaAdi+',AnaAdi:'+@AnaAdi+',DogumTarihi:'+ CONVERT(VARCHAR, @DogumTarihi, 120)+',DogumYeri:'+@DogumYeri+',Cinsiyet:'+@Cinsiyet+',OgrenimDurumId:'+CONVERT(VARCHAR,@OgrenimDurumId,120)+',KurumSicil:'+@KurumSicil+',KadroUnvanId:'+CONVERT(VARCHAR,@KadroUnvanId,120)+',Eposta:'+@Eposta+',Telefon:'+@Telefon+',KanGrubu:'+@KanGrubu+',BransId:'+CONVERT(VARCHAR,@BransId,120)+',UyeDurumId:'+CONVERT(VARCHAR,@UyeDurumId,120)+',CreatedIpAdress:'+@CreatedIpAdress+',KayitFormu:'+@KayitFormu+',CreatedUser:'+CONVERT(VARCHAR,@CreatedUser,120)+',IlId:'+CONVERT(VARCHAR,@IlId,120)+',IlceId:'+CONVERT(VARCHAR,@IlceId,120)+',KurumId:'+CONVERT(VARCHAR,@KurumId,120)+',BirimId:'+CONVERT(VARCHAR,@BirimId,120)+',SosyalGuvenlikKurumuId:'+CONVERT(VARCHAR,@SosyalGuvenlikKurumuId,120)+',SosyalGuvenlikSicilNumarasi:'+CONVERT(VARCHAR,@SosyalGuvenlikSicilNumarasi,120);

BEGIN TRY
BEGIN TRAN

SET @KararNoId = (SELECT TOP 1 Id FROM KararNo ORDER BY Id DESC)
SET @KararNo = (SELECT TOP 1 KararNo FROM KararNo ORDER BY Id DESC)
INSERT INTO Uye (TCKN,Adi,Soyadi,BabaAdi,AnaAdi,DogumTarihi,DogumYeri,Cinsiyet,OgrenimDurumuId,Eposta,Telefon,KanGrubu,UyeDurumId,CreatedIpAdress,CreatedUser,CreatedDateTime) VALUES (
@Tckn,@Adi,@Soyadi,@BabaAdi,@AnaAdi,@DogumTarihi,@DogumYeri,@Cinsiyet,@OgrenimDurumId,@Eposta,@Telefon,@KanGrubu,@UyeDurumId,@CreatedIpAdress,@CreatedUser,@Date);
Set @UyeId = SCOPE_IDENTITY()
INSERT INTO UyeKayitNo (UyeId,UyeNo,KararNoId,UyelikBaslamaTarihi,UyeDurumId,KayitFormu,Aktif) VALUES (@UyeId,DEFAULT,@KararNoId,@Date,@UyeDurumId,@KayitFormu,1)
SET @KayitNo = (SELECT UyeNo FROM UyeKayitNo WHERE UyeId=@UyeId AND Aktif = 1)

INSERT INTO UyeKurum (UyeId,IlId,IlceId,KurumId,BirimId,KurumSicil,KadroUnvanId,BransId,BaslangicTarihi,Aktif) VALUES (@UyeId,@IlId,@IlceId,@KurumId,@BirimId,@KurumSicil,@KadroUnvanId,@BransId,@Date,1)

INSERT INTO UyeSosyalGuvenlik (UyeId,SosyalGuvenlikKurumuId,SosyalGuvenlikSicilNumarasi,BaslangicTarihi,Aktif) VALUES (@UyeId,@SosyalGuvenlikKurumuId,@SosyalGuvenlikSicilNumarasi,@Date,1)


INSERT INTO UyeHareket (UyeId,IslemYeri,UserId,HareketTarih,IlkDeger,SonDeger,Aciklama,Aktif) VALUES (@UyeId,'sp_Uye_Insert',@CreatedUser,@Date,NULL,@UyeHareketString,NULL,1)
Set @Result = CONVERT(varchar(10),@UyeId)+','+CONVERT(varchar(10),@KayitNo)+','+CONVERT(varchar(10),@KararNo)
COMMIT TRAN

END TRY
BEGIN CATCH
ROLLBACK TRAN
END CATCH

END
GO

PHP:

$query = $db->prepare("EXEC  sp_Uye_Insert ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?");
$query->bindParam(1,$sp_result,PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT,  250);
$query->bindValue(2,$TCKN,PDO::PARAM_STR);
$query->bindValue(3,$Adi,PDO::PARAM_STR);
$query->bindValue(4,$Soyadi,PDO::PARAM_STR);
$query->bindValue(5,$BabaAdi,PDO::PARAM_STR);
$query->bindValue(6,$AnaAdi,PDO::PARAM_STR);
$query->bindValue(7,$DogumTarihi,PDO::PARAM_STR);
$query->bindValue(8,$DogumYeri,PDO::PARAM_STR);
$query->bindValue(9,$Cinsiyet, PDO::PARAM_STR);
$query->bindValue(10,intval($OgrenimDurumId),PDO::PARAM_INT);
$query->bindValue(11,$KurumSicil, PDO::PARAM_STR);
$query->bindValue(12,intval($KadroUnvanId),PDO::PARAM_INT);
$query->bindValue(13,$Eposta,PDO::PARAM_STR);
$query->bindValue(14,$Telefon,PDO::PARAM_STR);
$query->bindValue(15,$KanGrubu,PDO::PARAM_STR);
$query->bindValue(16,intval($BransId),PDO::PARAM_INT);
$query->bindValue(17,intval($UyeDurumId),PDO::PARAM_INT);
$query->bindValue(18,$CreatedIpAdress,PDO::PARAM_STR);
$query->bindValue(19,$KayitFormu,PDO::PARAM_STR);
$query->bindValue(20,intval($CreatedUser),PDO::PARAM_INT);
$query->bindValue(21,intval($IlId),PDO::PARAM_INT);
$query->bindValue(22,intval($IlceId),PDO::PARAM_INT);
$query->bindValue(23,intval($KurumId),PDO::PARAM_INT);
$query->bindValue(24,intval($BirimId),PDO::PARAM_INT);
$query->bindValue(25,intval($SigortaKurumu),PDO::PARAM_INT);
$query->bindValue(26,intval($SSKNo),PDO::PARAM_INT);
if($query->execute()){
echo json_encode(array(true,$query->fetch(PDO::FETCH_ASSOC)),$sp_result);
}else{
echo json_encode(array(false, "Üye Kaydedilemedi.",$query->errorInfo());
}

Вы можете мне помочь ?

1

Решение

Решено, проблема по хранимой процедуре

Только добавить в sp;

SET NOCOUNT ON

Напоследок ИП:

ALTER PROCEDURE [dbo].[sp_Uye_Insert](
--Uye
@Result varchar(250) OUTPUT,
@Tckn nvarchar(11),
@Adi nvarchar(50),
@Soyadi nvarchar(50),
@BabaAdi nvarchar(50),
@AnaAdi nvarchar(50),
@DogumTarihi date,
@DogumYeri nvarchar(250),
@Cinsiyet char(1),
@OgrenimDurumId int,
@KurumSicil nvarchar(50),
@KadroUnvanId int,
@Eposta nvarchar(250),
@Telefon nvarchar(250),
@KanGrubu nvarchar(50),
@BransId int,
@UyeDurumId int,
@CreatedIpAdress nvarchar(50),
@KayitFormu nvarchar(max),
@CreatedUser int,

-- UyeKurum
@IlId int,
@IlceId int,
@KurumId int,
@BirimId int,

--UyeSosyalGuvenlik
@SosyalGuvenlikKurumuId int,
@SosyalGuvenlikSicilNumarasi int
)
AS
SET NOCOUNT ON
BEGIN

DECLARE @UyeId int
DECLARE @KararNoId int
DECLARE @KararNo int
DECLARE @KayitNo int
DECLARE @UyeNo int
DECLARE @Date date
DECLARE @UyeHareketString nvarchar(max)

SET @Date = GETDATE()
SET @UyeHareketString = 'TCKN: '+@Tckn+',Adi:'+@Adi+',Soyadi:'+@Soyadi+',BabaAdi:'+@BabaAdi+',AnaAdi:'+@AnaAdi+',DogumTarihi:'+ CONVERT(VARCHAR, @DogumTarihi, 120)+',DogumYeri:'+@DogumYeri+',Cinsiyet:'+@Cinsiyet+',OgrenimDurumId:'+CONVERT(VARCHAR,@OgrenimDurumId,120)+',KurumSicil:'+@KurumSicil+',KadroUnvanId:'+CONVERT(VARCHAR,@KadroUnvanId,120)+',Eposta:'+@Eposta+',Telefon:'+@Telefon+',KanGrubu:'+@KanGrubu+',BransId:'+CONVERT(VARCHAR,@BransId,120)+',UyeDurumId:'+CONVERT(VARCHAR,@UyeDurumId,120)+',CreatedIpAdress:'+@CreatedIpAdress+',KayitFormu:'+@KayitFormu+',CreatedUser:'+CONVERT(VARCHAR,@CreatedUser,120)+',IlId:'+CONVERT(VARCHAR,@IlId,120)+',IlceId:'+CONVERT(VARCHAR,@IlceId,120)+',KurumId:'+CONVERT(VARCHAR,@KurumId,120)+',BirimId:'+CONVERT(VARCHAR,@BirimId,120)+',SosyalGuvenlikKurumuId:'+CONVERT(VARCHAR,@SosyalGuvenlikKurumuId,120)+',SosyalGuvenlikSicilNumarasi:'+CONVERT(VARCHAR,@SosyalGuvenlikSicilNumarasi,120);

BEGIN TRY
BEGIN TRAN

SET @KararNoId = (SELECT TOP 1 Id FROM KararNo ORDER BY Id DESC)
SET @KararNo = (SELECT TOP 1 KararNo FROM KararNo ORDER BY Id DESC)
INSERT INTO Uye (TCKN,Adi,Soyadi,BabaAdi,AnaAdi,DogumTarihi,DogumYeri,Cinsiyet,OgrenimDurumuId,Eposta,Telefon,KanGrubu,UyeDurumId,CreatedIpAdress,CreatedUser,CreatedDateTime) VALUES (
@Tckn,@Adi,@Soyadi,@BabaAdi,@AnaAdi,@DogumTarihi,@DogumYeri,@Cinsiyet,@OgrenimDurumId,@Eposta,@Telefon,@KanGrubu,@UyeDurumId,@CreatedIpAdress,@CreatedUser,@Date);
Set @UyeId = SCOPE_IDENTITY()
INSERT INTO UyeKayitNo (UyeId,UyeNo,KararNoId,UyelikBaslamaTarihi,UyeDurumId,KayitFormu,Aktif) VALUES (@UyeId,DEFAULT,@KararNoId,@Date,@UyeDurumId,@KayitFormu,1)
SET @KayitNo = (SELECT UyeNo FROM UyeKayitNo WHERE UyeId=@UyeId AND Aktif = 1)

INSERT INTO UyeKurum (UyeId,IlId,IlceId,KurumId,BirimId,KurumSicil,KadroUnvanId,BransId,BaslangicTarihi,Aktif) VALUES (@UyeId,@IlId,@IlceId,@KurumId,@BirimId,@KurumSicil,@KadroUnvanId,@BransId,@Date,1)

INSERT INTO UyeSosyalGuvenlik (UyeId,SosyalGuvenlikKurumuId,SosyalGuvenlikSicilNumarasi,BaslangicTarihi,Aktif) VALUES (@UyeId,@SosyalGuvenlikKurumuId,@SosyalGuvenlikSicilNumarasi,@Date,1)


INSERT INTO UyeHareket (UyeId,IslemYeri,UserId,HareketTarih,IlkDeger,SonDeger,Aciklama,Aktif) VALUES (@UyeId,'sp_Uye_Insert',@CreatedUser,@Date,NULL,@UyeHareketString,NULL,1)
Set @Result = CONVERT(varchar(10),@UyeId)+','+CONVERT(varchar(10),@KayitNo)+','+CONVERT(varchar(10),@KararNo)
COMMIT TRAN

END TRY
BEGIN CATCH
ROLLBACK TRAN
END CATCH

END
GO
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]