2017-04-10 191 views
1

我想从MS SQL 2008服务器查询数据。我正在查询来自SQL查看的数据。不是一个SQL表。从SQL视图MSSQL SQLSRV PHP查询

有谁知道是否SQLSRV能够从SQL Server查询视图?

下面的示例代码。当我使用时工作表但不使用时SQL查看

我正在使用PHP版本7以及MS SQL 2008 R2。

连接

$serverName = "LOC-SVR\SQLEXPRESS"; //serverName\instanceName 

$connectionInfo = array("Database"=>"dbName","UID" => "svc_test","PWD" => "test"); 
$connect = sqlsrv_connect($serverName, $connectionInfo); 

查询代码

$sql = "SELECT Col1 
      , Col2 
      , Col3 
     FROM V_TEST_VIEW;"; 

sqlsrv_configure('WarningsReturnAsErrors', 0); 

sqlsrv_query($connect,$sql); 

$res = sqlsrv_query($connect, $sql, array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET)); 

while ($row = sqlsrv_fetch_array($res, SQLSRV_FETCH_ASSOC)) 
     { 
      echo $row['Col1']; 
      echo $row['Col2']; 
      echo $row['Col3']; 
     } 

结果

没有错误。只有1行从视图返回。在Microsoft SQL Server Management Studio中,返回了几百行。

任何帮助表示赞赏。

+0

我使用View蒙山MS SQL PostgreSQL和MySQL和createad后的意见被视为tabels。唯一不同的是你如何创建它们,改变它们并摧毁它们。 –

+0

您创建的视图的代码在哪里? –

回答

0

找到了解决方案。 http://php.net/manual/en/function.sqlsrv-fetch-object.php

我能够使用它查询我的视图。

CODE

$sql = "SELECT Col1, Col2, Col3 FROM V_TEST_VIEW"; 
$stmt = sqlsrv_query($connect, $sql); 
if($stmt === false) { 
die(print_r(sqlsrv_errors(), true)); 
} 

// Retrieve each row as an object. 
// Because no class is specified, each row will be retrieved as a stdClass object. 
// Property names correspond to field names. 
while($obj = sqlsrv_fetch_object($stmt)) { 
    echo "<strong>".$obj->Col1."</strong>, ".$obj->Col2 ."<br />"; 
} 
+0

问题可能与游标类型'SQLSRV_CURSOR_KEYSET'有关。 – alalp