2012-09-12 97 views
0

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

现在,我在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在链接服务器上运行查询是否存在问题?

+0

我对PHP并不熟悉,但查看表的模式可能有助于显示可能导致问题的任何不寻常的字段......想知道是否有字段类型不是它从数据库返回到您的代码... –

回答

0

嗯,我想出了问题。我急于做一些代码来测试链接服务器是否工作,我只是使用相同的变量名作为sqlsrv_connect和sqlsrv_query的结果。原来,这是整个问题。我切换变量名称,以便连接对象是$ Link,并且查询保持为$ res。现在,我可以访问2005年到2000年试图通过的数据库。因此,在将来,我肯定会更仔细地将变量命名一些,所以我不会把头撞到墙上几个小时。

0

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

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

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

也删除var_dump($ary);

通常即使在使用“$行”中的数据显示任何错误,错误信息将显示与“sqlsrv_fetch_array”的问题。