0

所有執行SQL存儲過程後持續返回數據,麻煩與PHP

我一直潛伏在計算器了幾年了,總是能找到在手,解決問題需要的幫助。然而,這一次,我需要創建我的第一個問題,因爲我無法找到遇到同樣問題的問題。

我已經被困了一個多星期,因爲我已經吹了我的估計日期,所以我在工作時進入熱水。我把自己置於你的憐憫之中,希望你能幫助我解決我的頭痛問題。

我能夠通過PHP在SQL 2008服務器上運行存儲過程(運行Windows 2008 R2),其中我傳入一個參數來返回數據。

該參數共有十一(11)種選擇。每當我通過這些選擇中的一個時,就會返回預期的數據。然而,每當我使用任何其他選擇時,都不會返回數據(並且使用我當前的代碼,也不會返回任何錯誤)。

有11個選擇$ application_selected傳遞到存儲過程,並且只有一個這些選擇返回數據。其他人都不會返回數據或錯誤。

這裏是我的全部代碼:

<!DOCTYPE html> 
<html> 
<head> 
<title>data</title> 
</head> 
<body> 

<?php 
//////////////////////////////////////////////////////////////////////////// 
//connection information 
$servername = "192.168.1.104"; 
$username = "sa"; 
$password = "*"; 
$database = "*"; 

$connection_info = array("Database"=>$database, "UID"=>$username, "PWD"=>$password); 
$conn = sqlsrv_connect($servername, $connection_info); 

if($conn===FALSE) die(print_r(sqlsrv_errors(), true)); 
else echo "<font color=\"blue\">DB Connected.</font><br>"; 
///////////////////////////////////////////////////////////////////////////// 

$application_selected = "param1"; 
$sql_cmd = "EXECUTE GetApprover '$application_selected'"; 

$execute_this = sqlsrv_prepare($conn, $sql_cmd); 
$application_proc = sqlsrv_execute($execute_this); 

if($application_proc===FALSE) die(print_r(sqlsrv_errors(), true)); //execute failed; die and display errors 

else echo "<font color=\"blue\">DB data retrieved.</font><br><br>"; 

$row_apps = ""; 
$count = 0; 
echo "<font color=\"blue\">Attempting data output via loop</font><br><br>"; 

///////////////////////////////////////////////////////////////////////////// 
// output data 
//echo var_dump($execute_this)."<br><br>"; 
echo "<font color=\"blue\">Application selected = </font>\"".$application_selected."<font color=\"blue\">\" - data pulled &#9660;</font><br><br>"; 
while(($row_apps = sqlsrv_fetch_array($execute_this)) && (sqlsrv_fetch_array($execute_this) <> FALSE)) { //while var has data 
if (!isset($row_apps)) die(print_r(sqlsrv_errors(), true)); 
$count += 1; 
echo $row_apps['ApplicationName']." - ".$row_apps['ApproverCode']." - ".$row_apps['ApproverDesc']." - ".$row_apps['FullName']." - ".$row_apps['Email']." - ".$row_apps['UserId']."<br>"; 
} 
///////////////////////////////////////////////////////////////////////////////// 

echo "<br><font color=\"blue\">&#9650; Data displayed."; 
echo "<br><br><font color=\"blue\">There were [<font color=\"red\"><b>$count</b></font>] rows returned.<br><br><br>"; 

echo "<br>\$servername = "; 
echo var_dump($servername)."<br>"; 
echo "<br>\$username = "; 
echo var_dump($username)."<br>"; 
echo "<br>\$password = "; 
echo var_dump($password)."<br>"; 
echo "<br>\$database = "; 
echo var_dump($database)."<br>"; 
echo "<br>\$connection_info = "; 
echo var_dump($connection_info)."<br>"; 
echo "<br>\$conn = "; 
echo var_dump($conn)."<br>"; 
echo "<br>\$application_selected = "; 
echo var_dump($application_selected)."<br>"; 
echo "<br>\$sql_cmd = "; 
echo var_dump($sql_cmd)."<br>"; 
echo "<br>\$execute_this = "; 
echo var_dump($execute_this)."<br>"; 
echo "<br>\$application_proc = "; 
echo var_dump($application_proc)."<br>"; 
echo "<br>\$row_apps = "; 
echo var_dump($row_apps)."<br>"; 
echo "<br>\$count = "; 
echo var_dump($count)."<br>"; 

echo "<br><br><br>"; 
sqlsrv_close($conn); 
echo "<br>DB Connection closed.</font><br><br><br>"; 

?> 
</body> 
</html> 
+1

基本調試:如果您嘗試通過MSSMS手動運行該存儲過程,那麼會發生什麼? – 2013-02-18 16:41:08

+0

Marc B - 感謝您的評論。我正在與一個dba合作,在這類事情上可能會或可能不會很軟。然而,無論何時他在自己的環境中運行sproc,他似乎都可以正確地/按預期取回所有數據。 – dmajin 2013-02-18 16:46:54

+0

確保事物完全一致,包括使用您在php代碼中使用的相同ID登錄到MSSMS。如果dba使用'sa'級別權限登錄並且您正在受限帳戶下運行,則這並不意味着太多。 – 2013-02-18 16:49:37

回答

0

看來我初步懷疑(雖然我有這樣的沒有確鑿的證據)某種分貝問題的是推着我的DBA後的罪魁禍首(也是我的導演)與一些測試結果來自添加的調試代碼[如var_dump()/ print_r()]。他對導致這一切的問題的回覆如下:

「我不知道發生了什麼,但是我將表格內容從我的開發環境複製到您的開發環境,現在工作正常。」

對不起,我的問題麻煩你們。我很感激馬克B和拉德很快就回復了我的求助,我真的希望這個問題能夠幫助未來的人。