在PHP中执行SQL存储过程后,一致地返回数据的麻烦

时间:2013-02-18 16:38:37

标签: php sql-server-2008 stored-procedures windows-server-2008-r2

所有

我已经潜伏在stackoverflow上几年了,总能找到解决手头问题所需的帮助。然而,这一次,我需要创建我的第一个问题,因为我无法找到遇到同样问题的问题。

我已经被困了一个多星期而且在工作中遇到热水,因为我已经吹了我的预计日期。我把自己置于你的怜悯之中,希望你可以帮助我解决我的编码问题。

我能够在VM(运行Windows 2008 r2)上的SQL 2008服务器上通过PHP返回执行存储过程的数据,其中我传入一个参数。

该参数总共有十一(11)种选择。每当我传入其中一(1)个选项时,都会返回预期的数据。

但是,每当我使用任何其他选项时,都不会返回任何数据(并且使用我当前的代码,也不会返回任何错误)。

$ application_selected 有11个选项可传入存储过程,其中只有一(1)个选项返回数据。没有其他人返回数据或错误。

这是我的整个代码:

<!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 个答案:

答案 0 :(得分:0)

似乎我的初步怀疑(虽然我没有这样的确切证据)某种db问题是推动我的dba(也是我的导演)的罪魁祸首,其中包含一些测试结果来自添加的调试代码[如var_dump()/的print_r()]。他对导致这一切的问题的答复如下:

“我不知道发生了什么,但我将表格内容从我的开发环境复制到您的开发环境,现在情况正常。”

很抱歉我的问题困扰着你们。我很感激Marc B和Raad如此迅速地回应了我的请求,我真的希望这个问题可以帮助将来的某个人。