2017-10-17 3 views
1

J'ai un proc stockée simple -PHP/sqlsrv_query ressource id est 3, mais ne renvoie pas de données

CREATE PROCEDURE [dbo].[usp_ws_s_GetCargoClearanceApproval_t] 
    @BOLID INT, 
    @ACCOUNTID INT, 
    @TOTALAMOUNT FLOAT OUT, 
    @STORAGEDAYS INT OUT, 
    @ACCOUNTCREDIT FLOAT OUT, 
    @CREDITLIMIT FLOAT OUT 
AS 

BEGIN 
--SET NOCOUNT ON 
    SET @TOTALAMOUNT= '25.00'; SET @STORAGEDAYS = 5; SET @ACCOUNTCREDIT =2500.00; SET @CREDITLIMIT=75000.00 ; 
    SELECT @TOTALAMOUNT,@STORAGEDAYS,@ACCOUNTCREDIT,@CREDITLIMIT; 
END 

Ceci est appelé par un fichier php et le code est -

<?php 
$bol_id = 426863; 
$account_id = 26293; 
$totalamount = 0.00; 
$storagedays = 0; 
$accountcredit = 0.00; 
$creditlimit = 0.00; 

$param1 = array($bol_id, SQLSRV_PARAM_IN); 
$param2 = array($account_id, SQLSRV_PARAM_IN); 

$param3 = array($totalamount, SQLSRV_PARAM_OUT); 
$param4 = array($storagedays, SQLSRV_PARAM_OUT); 
$param5 = array($accountcredit, SQLSRV_PARAM_OUT); 
$param6 = array($creditlimit, SQLSRV_PARAM_INOUT); 


$params = array($param1, $param2, $param3, $param4, $param5, $param6); 

$tsql = "{call usp_ws_s_GetCargoClearanceApproval_t(?,?,?,?,?,?)}"; 

$Account_Transaction_List = array(); 

$connectionInfo = array( "Database"=>'**', "UID"=>'**', "PWD"=>'***'); 
$conn = sqlsrv_connect("**", $connectionInfo); 

if($conn === false) { 
    echo "Couldn't connect to SQL Server on $this->servername.<br />"; 
    die(print_r(sqlsrv_errors(), true)); 
} else { 
    echo "Connected!"; 
} 
echo '<br/>'; 

$result = sqlsrv_query($conn, $tsql, $params); 
echo "<pre/> $result - ";print_r($result); 
echo '<br/>'; 

if ($result !== NULL) { 
    $rows = sqlsrv_has_rows($result); 
    if ($rows === true) 
     echo "\nthere are rows\n"; 
    else 
     echo "\nno rows\n"; 
} 

while($row = sqlsrv_fetch_array($result)) 
{ 
    echo 'IN <br/>'; 
} 

?> 

Renvoie:

Connecté!

Resource id # 3 - Resource id # 3

aucune ligne

Peu importe ce que j'essaie je ne reçois pas de données. J'ai essayé de passer les params par ref, en réglant les options du curseur sur la connexion et d'autres permutations pour les deux derniers jours, pas de chance.

Quelqu'un a-t-il rencontré ce problème? Tout pointeur sera apprécié.

Merci

+0

Avez-vous essayé de tester la procédure stockée par elle-même? – TinkerTenorSoftwareGuy

+0

'L'ID de ressource # 3 'signifie simplement que la requête a réussi, cela ne signifie pas qu'il retournera des lignes. Donc certainement essayer la procédure de son propre chef et partir de là. – aynber

+0

Merci d'avoir regardé les gars. le sp renvoie des valeurs lorsqu'il est exécuté sur sql server management studio. Comme vous pouvez le voir le sp lui-même est très simple. –

Répondre

2

Le seul problème que je remarque est que $creditlimit est réglé sur SQLSRV_PARAM_INOUT. Je suggère de vérifier sqlsrv_errors() après avoir exécuté la requête. Il peut y avoir des avertissements renvoyés qui éclairent la situation. Essayez quelque chose comme ceci:

<?php 
$bol_id  = 426863; 
$account_id = 26293; 
$totalamount = 0.00; 
$storagedays = 0; 
$accountcredit = 0.00; 
$creditlimit = 0.00; 

$params = [ 
    [$bol_id,  SQLSRV_PARAM_IN], 
    [$account_id, SQLSRV_PARAM_IN], 
    [$totalamount, SQLSRV_PARAM_OUT], 
    [$storagedays, SQLSRV_PARAM_OUT], 
    [$accountcredit, SQLSRV_PARAM_OUT], 
    [$creditlimit, SQLSRV_PARAM_OUT], 
]; 

$conn = sqlsrv_connect("**", ["Database" => "**", "UID"=> "**", "PWD" => "***"]); 

if ($conn === false) { 
    echo "Couldn't connect to SQL Server on $this->servername.<br />"; 
    die(print_r(sqlsrv_errors(), true)); 
} else { 
    echo "Connected!<br/>"; 
} 

$tsql = "{CALL usp_ws_s_GetCargoClearanceApproval_t(?, ?, ?, ?, ?, ?)}"; 

$result = sqlsrv_query($conn, $tsql, $params); 

if ($err = sqlsrv_errors()) { 
    echo "There were errors or warnings!<br/>"; 
    print_r($err); 
    echo "<br/>"; 
} 

if ($result && sqlsrv_has_rows($result)) { 
    echo "There are rows<br/>"; 
} else { 
    echo "There are no rows<br/>"; 
} 

while($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) { 
    print_r($row); 
    echo "<br/>"; 
} 

?> 
+0

Merci miken32, ça marche. Le bit intéressant est, j'ai essayé juste avec SQLSRV_PARAM_OUT. Bref tout va bien qui finit bien. –

0

Apparemment, l'extension sqlsrv a des problèmes de dessin qui sont calculés dans le sp. déjà mon sp lu -

ALTER PROCEDURE [dbo].[usp_ws_s_GetCargoClearanceApproval_t] 
@BOLID INT, 
@ACCOUNTID INT, 
@TOTALAMOUNT FLOAT OUT, 
@STORAGEDAYS INT OUT, 
@ACCOUNTCREDIT FLOAT OUT, 
@CREDITLIMIT FLOAT OUT 
AS 

BEGIN 
--SET NOCOUNT ON 
    set @TOTALAMOUNT= '25.00'; SET @STORAGEDAYS = 5; SET @ACCOUNTCREDIT =2500.00; SET @CREDITLIMIT=75000.00 ; 
    select @TOTALAMOUNT,@STORAGEDAYS,@ACCOUNTCREDIT,@CREDITLIMIT; 
END 

chercher les données que je devais modifier le sp lire

select @TOTALAMOUNT as TotalAmount,@STORAGEDAYS as StorageDays,@ACCOUNTCREDIT as AccountCredit,@CREDITLIMIT as CreditLimit; 

dans ce cas, je ne devais pas définir les params de sortie soit, tout le monde est heureux :)