我的问题基本上围绕着我需要/更喜欢使用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在链接服务器上运行查询是否存在问题?
答案 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>