带链接服务器的SQLSRV


SQLSRV with Linked Server

我的问题主要围绕着我需要/更喜欢使用PHP的sqlsrv来访问sql server 2000数据库。我已经在这个项目中使用了sql server 2005来运行所有查询,现在切换到ODBC PHP驱动程序将是一个非常头疼的问题。因此,现在我在同一台计算机上安装了原始的SQLServer2000数据库和2005,并在2之间创建了一个链接服务器。在ManagementStudioExpress中测试它的方法是对其中一个表运行一个简单的查询。

现在,我在PHP中使用完全相同的查询,使用sqlsrv_query并遇到错误。我测试这一点的PHP代码看起来像这个

$connectionOptions = array("UID"=>"user","PWD"=>"password"); 
$res = sqlsrv_connect("(local)'SQLExpress", $connectionOptions);
if(!$res) die("ERRORS : " . print_r(sqlsrv_errors()));    
echo "SELECT * FROM [ServerName].DB.dbo.Table<br/>";
$res = sqlsrv_query($res,"SELECT * FROM [ServerName].DB.dbo.Table");
if($res===false){
    die("ERRORS : " . print_r(sqlsrv_errors()));
}else{
        var_dump($res);
    $ary = sqlsrv_fetch_array($res);
} 
var_dump($ary);
echo "<hr>";
var_dump(sqlsrv_errors());

此代码的问题在于sqlsrv_query的结果不会返回false,而是返回未知类型的resource(11)。因此,对该结果运行fetch_array告诉我一个无效的参数被传递给了sqlsrv_fetch_array。我不知道此刻该怎么办。通过sqlsrv在链接服务器上运行查询是否存在问题?

您的代码中似乎没有错误。

请在循环中尝试fetch_array并更新结果。

while($row = sqlsrv_fetch_array($result))
{
    echo($row['field_name']);
}

也删除var_dump($ary);

通常,即使使用"$row"的数据显示中存在任何错误,错误消息也会显示"sqlsrv_fetch_array"的问题。

我解决了这个问题。在我匆忙编写一些代码来测试链接服务器是否工作的过程中,我只是对sqlsrv_connect和sqlsrv_query的结果使用了相同的变量名。事实证明,这就是问题的全部。我切换了变量名,使连接对象为$Link,查询保持为$res。现在,我可以访问我试图从2005年到2000年访问的数据库。所以在未来,我肯定会更仔细地命名我的变量,这样我就不会在几个小时内把头撞在墙上了。