2014-03-25 94 views
3

因此,我有一個使用存儲過程與我的SQL數據庫進行交互的php腳本。存儲過程工作得很好,問題是我不知道如何讓我的PHP從存儲過程中回顯返回值。存儲過程基本上是使用激活密鑰激活帳戶並設置用戶名和密碼。使用PHP從SQL存儲過程獲取返回值

它基本上表示「如果提供的激活碼沒有用戶名,請將其設置爲提供的用戶名,並返回1,如果它已經有用戶名RETURN 2,並且激活碼不存在則返回3」 。它在SQL中完美工作,甚至可以提供正確的返回值。現在我怎樣才能讓我的PHP回聲呢?我曾嘗試以下:

$link = sqlsrv_connect($myServer, array('Database' => $myDB, 'UID' => $myUser, 'PWD' => $myPass)); 
if($link === FALSE) { 
    die('Could not connect: ' . sqlsrv_errors(SQLSRV_ERR_ALL)); 
} 

$key = $_REQUEST['key']; 
$username = $_REQUEST['username']; 
$password = $_REQUEST['password']; 

$query = "EXEC Activate_Account"; 
$query .=" @key = "; 
$query .= $key; 
$query .=", @user = "; 
$query .= $username; 
$query .=", @pass = "; 
$query .= $password; 

$result = sqlsrv_query($link, $query); 

while($row = sqlsrv_fetch_array($result)) 
{ 
    echo $row[0]; 
} 

sqlsrv_close($link); 

while($row = sqlsrv_fetch_array($result)) 
{ 
    echo $row['Return Value']; 
} 

兩個人都沒有任何迴音。

+1

你沒有帶包括的部分程序實際上無法正常工作,那就是您定義$ result的部分。因此,在你的問題中包含該代碼。 「不回顯任何內容」是不準確的,$ row的值究竟是什麼?它的數據類型是什麼,它是一個空字符串,還是你不需要正確的鍵的數組? –

回答

3

要使用存儲過程返回一個值:

例如:

SQL:

CREATE DEFINER=`user`@`localhost` PROCEDURE `ProcedureName`(IN `Input_Value` INT, OUT `Out_val` INT) 
    LANGUAGE SQL 
    NOT DETERMINISTIC 
    CONTAINS SQL 
    SQL SECURITY DEFINER 
    COMMENT '' 
BEGIN 
// Your SQL Code 

    SET Out_val= Your Value; 
    SELECT Out_val; 
END 

PHP代碼:

$insert = "CALL ProcedureName(:Input_Value, 
          @Out_val)"; 
$bdd = new PDO('mysql:host=localhost;dbname=db-name', 'user', 'password'); 

$stmt = $bdd->prepare($insert);  
$stmt->bindParam(':Input_Value', $an_input_value, PDO::PARAM_STR); 

$stmt->execute(); 
$tabResultat = $stmt->fetch(); 
$Out_val = $tabResultat['Out_val']; 
var_dump($Out_val);