2013-11-04 66 views
0

我的連接建立後,我可以打電話給我的存儲過程:mssql_execute返回沒有結果 - 更好的調試方式?

$pid = $_GET['pid']; 
$conn = mssql_connect($server, $username, $password); 
... 
mssql_select_db('mydb',$conn); 

$sproc = mssql_init('consultGetPatientData'); 
mssql_bind($sproc, '@pid', $pid, SQLINT2); 

$result = mssql_execute($sproc); 
echo mssql_num_rows($result); 
if($result){  
    $row = mssql_fetch_assoc($result);  
... 

$pid值正確傳遞。 的$result值存在是var_dump

resource(3) of type (mssql result) 

而且msql_num_rows($result)產量0行。

連接到數據庫的用戶具有足夠訪問consultGetPatientData存儲過程:

Properties

當我手動運行存儲的過程,被返回期望的結果。我

我的問題:

是否有更好的方法來調試這些類型的錯誤?

有什麼明顯的我失蹤了嗎?

謝謝。

編輯:根據要求存儲過程的代碼:

ALTER PROCEDURE [dbo].[consultGetPatientData] 
    @pid int = 0  
AS 
BEGIN 
    SET NOCOUNT ON; 

select 
    pd.pid, 
    pd.external_id, 
    pd.fname, 
    pd.lname, 
    pd.DOB, 
    pd.ss, 
    pd.sex, 
    pd.allergies, 
    pb.date, 
    pb.release 
from 
    patient_data pd 
     inner join patient_booking_data pb on pd.pid = pb.pid 
where 
    pd.pid = @pid 
    and pb.date in (
     select MAX(date) from patient_booking_data where pid = @pid 
    ) 
END 
+0

讓我看看你的SP代碼... – Hackerman

+0

添加存儲程序。 – etm124

+0

當調試時我喜歡使用error_log()記錄每一件事情,你也可以將代碼包裝在try-catch塊中。 – meda

回答

3

更改此:

$sproc = mssql_init('consultGetPatientData'); 
mssql_bind($sproc, '@pid', $pid, SQLINT2); 

$result = mssql_execute($sproc); 
echo mssql_num_rows($result); 

要這樣:

$result=mssql_query("consultGetPatientData ".$pid.""); 
echo mssql_num_rows($result); 

while($arr = mssql_fetch_assoc($result)) 
{ 
echo $arr['sex']."</br>"; 
//you can put the rest of the code to display the rest of the fields 
} 
+0

有趣的是,羅伯特。 'mssql_query'的用戶工作,而不是使用'mssql_execute'。這個相同的代碼被部署在另一個遠程服務器上,使用'execute'工作得很好。無論如何,你的答案奏效。謝謝。 – etm124