带链接服务器的SQLSRV

时间:2012-09-12 16:05:02

标签: php sql-server

我的问题基本上围绕着我需要/更喜欢使用PHP的sqlsrv来访问sql-server 2000数据库。我已经使用过sql server 2005的项目来运行所有的查询,并切换到类似ODBC PHP驱动程序的东西,现在是一个非常令人头痛的问题。所以现在我将原始SQL Server 2000数据库和2005安装在同一台计算机上,并且我在2.之间创建了一个链接服务器。在Management Studio Express中测试它,通过对其中一个表运行简单查询。

现在,我使用sqlsrv_query在PHP中使用完全相同的查询并遇到错误。我测试它的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但返回unknown类型的资源(11)。因此,对该结果运行fetch_array会告诉我将无效参数传递给sqlsrv_fetch_array。我不知道此时该做什么。通过sqlsrv在链接服务器上运行查询是否存在问题?

2 个答案:

答案 0 :(得分:0)

代码中似乎没有错误。

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

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

同时删除var_dump($ary);

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

答案 1 :(得分:0)

好吧,我发现了问题。我急于制作一些代码来测试链接服务器是否有效,我只是使用相同的变量名来获得sqlsrv_connect和sqlsrv_query的结果。事实证明,这就是整个问题。我切换了变量名,以便连接对象是$ Link,查询保持为$ res。现在,我可以访问我试图通过2005年进入2000年的数据库。所以在将来,我肯定会更谨慎地命名我的变量,所以我不会把我的头撞到墙上好几个小时。 / p>