2016-07-21 31 views
1

我有一个网站从我的MSSQL服务器提取数据。我正在使用函数为报表构建表。下面是我得到了什么:PDO PHP选择不同的查询不适用于mssql

function BeginTable($rowCount,$headings,$searchValue,$ReportName,$OneButton,$NewSearch) 
{ 
    try{ 
    $StateSelectSQL = "select distinct State from pmdb.MaterialTracking where State is not null"; 
    var_dump($StateSelectSQL);echo " What!<br>"; 

    $getSelect = $conn->query($StateSelectSQL); 
    var_dump($getSelect);echo " When!<br>"; 

    $StateSelectNames = $getSelect->fetchALL(PDO::FETCH_ASSOC); 
    var_dump($StateSelectNames);echo " Where!<br>"; 
    } 
    catch(Exception $e) 
    { 
     echo "Something went wrong"; 
     die(print_r($e->getMessage())); 
    } 

我想这太:

try{ 
     $StateSelectSQL = "select distinct State from pmdb.MaterialTracking where State is not null"; 
     var_dump($StateSelectSQL);echo " What!<br>"; 

     $getSelect = $conn->prepare($StateSelectSQL); 
     $getSelect->execute(); 

     //$getSelect = $conn->query($StateSelectSQL); 
     //var_dump($getSelect);echo " When!<br>"; 

     $StateSelectNames = $getSelect->fetchALL(PDO::FETCH_ASSOC); 
     var_dump($StateSelectNames);echo " Where!<br>"; 
    } 
    catch(Exception $e) 
    { 
     echo "Something went wrong<br>"; 
     die(print_r($e->getMessage())); 
    } 

第二和第三var_dump“从来没有任何显示和代码(此处未示出)的其余部分不得到运行。如果我注释掉$getSelect$StateSelectNames行(其中var_dump位于它们下面),那么其他所有内容都可以正常工作。

这里是我的DBConn.php文件,是includedFunction以上:

$conn = new PDO("sqlsrv:server=$servername;database=$dbname", $username,$password); 
    //set the PDO error mode to exception 
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $conn->setAttribute(PDO::SQLSRV_ATTR_QUERY_TIMEOUT, 10); 

什么是错行$getSelect = $conn->query($StateSelectSQL);我无法弄清楚。我试过在我的foreach这样使用它:

foreach($conn->query($StateSelectSQL) as $StateName) 

但是这也行不通。它再次停在这条线上,不再进一步。我唯一能想到的就是我的SQL搞砸了,但是当我在SSMS中运行它时,它工作正常!

发生了什么事?

回答

0

我已经拉我的头发一天后想通了!我不得不include我的DBConn.php里面的function。之后它工作。我不知道为什么这很重要,因为它是在文件开头的included。如果有人能解释为什么我会很感激!

现在看起来是这样的:

function BeginTable($rowCount,$headings,$searchValue,$ReportName,$OneButton,$NewSearch) 
{ 
    try{ 
     include("DBConn.php"); 
     $SelectSQL = "select distinct State from pmdb.MaterialTracking where State is not null order by State";    

     $getSelect = $conn->prepare($SelectSQL); 

     $getSelect->execute(); 

     $StateSelectNames = $getSelect->fetchALL(PDO::FETCH_ASSOC); 

     } 
     catch(Exception $e) 
     { 
      echo "Something went wrong<br>"; 
      die(print_r($e->getMessage())); 
     } 
1

尝试在使用fetchAll之前准备并执行SQL。还应考虑启用异常模式,如果您还没有将您的语句包含在try catch中 - 这应该标记任何问题(例如,您的应用程序数据库用户没有权限访问模式或语法错误等)

异常:

See this stack overflow post for info about how to enable

并为您的代码:

try { 
    $sql = " 
    SELECT DISTINCT State 
     FROM pmdb.MaterialTracking 
    WHERE State IS NOT NULL 
    "; 

    $sth = $conn->prepare($sql); 
    $sth->execute(); 

    $rowset = $sth->fetchAll(PDO::FETCH_ASSOC); 
    print_r($rowset); 

} catch PDOException($err) { 
    echo "Something went wrong". 
    echo $err; 
} 
+0

我加入了尝试捕捉周围(见上文),但仍然只有后到达第一个'var_dump'然后什么!它不会抛出错误。 – Mike