0

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

现在,我在 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 而是返回类型未知的资源(11)。所以在该结果上运行 fetch_array 告诉我一个无效的参数被传递给了 sqlsrv_fetch_array。我不确定此时该怎么做。通过 sqlsrv 在链接服务器上运行查询是否存在问题?

4

2 回答 2

0

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

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

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

也删除var_dump($ary);

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

于 2012-09-12T17:05:23.957 回答
0

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

于 2012-09-12T17:35:54.160 回答