Execution d'une procedure via PHP
Bonjour à tous !
Je souhaite appeler une procédure via php, j'utilise PDO pour les query.
Malgré beaucoup de recherche, je n'arrive pas à récupérer la valeur de retour de ma procédure ...
Alors quand je l'appel juste comme ceci :
Code:
CALL CombinedTime '000005000000RF'
Pas de soucis, cela marche ! Mais je ne peut recuperer la valeur de retour .. 8O
Voici mon code php
Code:
1 2 3 4 5 6 7 8
| $IdAidant = '000005000000RF';
$sql = "{:retval = CALL CombinedTime (@IdAidant=:IdAidant)}";
$stmt = $bdd->prepare($sql);
$retval = null;
$stmt->bindParam('retval', $retval, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, 4);
$stmt->bindParam('IdAidant', $IdAidant, PDO::PARAM_STR, 14);
$stmt->execute(); |
et ma procédure :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
/* This stored procedure combines any overlapping time segments into
a single segment in the temporary table #CombinedTime. Only non-
overlapping segements of time exist in this table. It then returns the
total hours for all these remaining segments.
Assumptions:
1. Date_Start <= Date_End
2. Date_Start, and Date_End are not null
Usage:
DECLARE @Total_Hours AS INT
EXEC @Total_Hours = CombinedTime
PRINT @Total_Hours
*/
ALTER PROCEDURE [dbo].[CombinedTime]
@IdAidant char(14)
AS
DECLARE
@Date_Start AS SMALLDATETIME,
@Date_End AS SMALLDATETIME,
@Total_Hours AS INT
/* Create temporary table to contain combined information.
*/
CREATE TABLE #CombinedTime (
Date_Start SMALLDATETIME NOT NULL ,
Date_End SMALLDATETIME NOT NULL
)
/* Use a cursor to get every record from Session_Temp */
DECLARE Time_Cursor CURSOR FOR
SELECT DateDebut, DateFin
FROM Evenement WHERE (IdAidant = @IdAidant AND DateDebut BETWEEN '20120126 00:00:00' AND '20120126 23:59:00')
ORDER BY DateDebut ASC
OPEN Time_Cursor
FETCH NEXT FROM Time_Cursor INTO @Date_Start, @Date_End
WHILE (@@FETCH_STATUS != -1)
BEGIN
/* Update an existing record in the temporary table if Date_Start is
within the bounds of an existing record, and the Date_End is outside */
UPDATE #CombinedTime
SET Date_End = @Date_End
WHERE @Date_Start BETWEEN Date_Start AND Date_End
AND @Date_End > Date_End
/* Insert a record that falls completely outside previous ranges */
INSERT INTO #CombinedTime
(Date_Start, Date_End)
SELECT @Date_Start, @Date_End
WHERE NOT EXISTS (SELECT 1
FROM #CombinedTime
WHERE @Date_Start < Date_End)
FETCH NEXT FROM Time_Cursor INTO @Date_Start, @Date_End
END /* WHILE */
CLOSE Time_Cursor
DEALLOCATE Time_Cursor
/* Get the total hours from the non-overlapping segments */
SELECT @Total_Hours = SUM(DATEDIFF(mi, Date_Start, Date_End))
FROM #CombinedTime
DROP TABLE #CombinedTime
RETURN @Total_Hours |
Lors du lancement du script, j’obtiens :
Citation:
Le param�tre formel '@IdAidant' n'a pas �t� d�clar� comme param�tre OUTPUT, mais le param�tre actuel a �t� transmis � la sortie demand�e.'
Bien sur j'ai essayé de mettre PARAM_INPUT_OUTPUT pour le parametre IdAidant.
Quelqu'un à t-il déjà été confronte à ce problème ?