phpsql-serverstored-procedurespdopdo-odbc

How to execute Mssql Stored Procedure with Output Parameter on PDO(ODBC Driver)?


I using ODBC Driver(at host) and sqlsrv Driver(at local) for PDO. Successfully inserted the tables data but, i not handle output parameter,I did tried this;

  1. $query->fetch(PDO::FETCH_ASSOC);
  2. $db->query("SELECT @Result")->fetch(PDO::FETCH_ASSOC);
  3. $sp_result;

MSSQL Stored Procedure :

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());
}

Can you help me ?


Solution

  • It's solved, Problem on the stored procedure

    Only add to sp;

    SET NOCOUNT ON
    

    Finally SP:

    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