所有执行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 ▼</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\">▲ 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>
基本调试:如果您尝试通过MSSMS手动运行该存储过程,那么会发生什么? – 2013-02-18 16:41:08
Marc B - 感谢您的评论。我正在与一个dba合作,在这类事情上可能会或可能不会很软。然而,无论何时他在自己的环境中运行sproc,他似乎都可以正确地/按预期取回所有数据。 – dmajin 2013-02-18 16:46:54
确保事物完全一致,包括使用您在php代码中使用的相同ID登录到MSSMS。如果dba使用'sa'级别权限登录并且您正在受限帐户下运行,则这并不意味着太多。 – 2013-02-18 16:49:37