Bonsoir,
je rencontre un probleme avec une procedure stored dans sql server et quand je veut l'excuter sa reourne rien un peut d'aide svp je bloque depuis quelques jours la dessus

je vous montre un petit example de ce que je fais ,
voici la procedure sur sql server:

USE [prese]
GO
/****** Object:  StoredProcedure [dbo].[SonNum]    Script Date: 11/23/2017 12:41:50 PM ******/
SET ANSI_NULLS OFF
GO
SET QUOTED_IDENTIFIER OFF
GO
ALTER PROCEDURE [dbo].[SonNum]  (   @FiNo bigint,
                        @TeNo bigint,
                        @Dok int)
AS

BEGIN

declare @DokNum bigint

set @DokNum=(select DokNo from CH_SonDokNum where FiNo=@FiNo and TeNo=@TeNo and Dok=@Dok)

if @DokNum = 0  or @DokNum is null
begin
     set @DokNum=1
    INSERT  CH_SonDokNum (FiNo,TesNo,Dok,kNo) values(@FiNo,@TeNo,@Dok,2)
end 
else 
begin
    update CH_SonNum set Dok=Dok+1 where FiNo=@FiNo and TeNo=@TeNo and Dok=@Dok

end 

select @DokNum as Dok

end

et voici mon code php :

<?php  

$FiNo= 1;
$TeNo=10;
$Dok=204;

$sql = "EXEC [dbo].[SonNum] '$FiNo','TeNo','$Dok';
$stmt =  sqlsrv_query( $conn,$sql);
if( $stmt === false ) {
    if( ($errors = sqlsrv_errors() ) != null) {
        foreach( $errors as $error ) {
            echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
            echo "code: ".$error[ 'code']."<br />";
            echo "message: ".$error[ 'message']."<br />";
        }
    }
}

?>

merci a vous.

5 réponses


Ani
Auteur
Réponse acceptée

Salut,
fallait que j'ajoute aussi sa:

if( $stmt ) {
     sqlsrv_commit( $conn );
     echo "Transaction committed.<br />";
} else {
     sqlsrv_rollback( $conn );
     echo "Transaction rolled back.<br />";
}

Bonjour ,

je ne connais pas les procédures MySqlServer et je vais surêment dire une connerie mais il n'y a pas de notion de paramètres IN et OUT ?

Ani
Auteur

Bonjours,

j'ai tester aussi mais sa marhce pas non plus .

$procedure_params = array(
array($FiNo, SQLSRV_PARAM_IN),
array($TeNo, SQLSRV_PARAM_IN),
array($Dok, SQLSRV_PARAM_IN));
$stmt =  sqlsrv_query( $conn,$sql,$procedure_params);

Je parlais de précision sur le paramètre dans la procédure.

par exemple

CREATE PROCEDURE GetImmediateManager
@employeeID INT,
@managerID INT OUTPUT
AS
BEGIN
SELECT @managerID = ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = @employeeID
END

Salut,

remplace ça :

$sql = "EXEC [dbo].[SonNum] '$FiNo','TeNo','$Dok';

par ça :

    $sql = "EXEC [dbo].[SonNum]($FiNo,$TeNo,$Dok);

les variables sont numérique, donc, pas entre côte ;)
de plus, il faut mettre des parentheses pour les parametres,

@plus.

Pierre