0

私の問題は基本的に、PHPのsqlsrvを使用してsql-server 2000データベースにアクセスする必要がある/好むことに関係しています。私は、SQL Server 2005 でそれを使用してすべてのクエリを実行し、ODBC PHP ドライバーのようなものに切り替えることは、今ではかなりの頭痛の種になるプロジェクトに取り組んできました。これで、元の SQL Server 2000 データベースと 2005 が同じコンピューターにインストールされ、2 つのサーバーの間にリンク サーバーが作成されました。Management Studio Express でのテストでは、テーブルの 1 つに対して単純なクエリを実行することで機能しました。

今、私は 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 を返さず、タイプ不明の resource(11) を返すことです。したがって、その結果に対して fetch_array を実行すると、無効なパラメーターが sqlsrv_fetch_array に渡されたことがわかります。この時点で何をすべきかわかりません。sqlsrv を介してリンク サーバーでクエリを実行するだけで問題が発生しますか?

4

2 に答える 2

0

さて、私は問題を理解しました。リンク サーバーが機能するかどうかをテストするコードを急いで作成するために、sqlsrv_connect と sqlsrv_query の結果に同じ変数名を使用しました。結局、それが全体の問題でした。変数名を変更して、接続オブジェクトが $Link になり、クエリが $res のままになるようにしました。これで、2005 年から 2000 年にかけて取得しようとしていたデータベースにアクセスできるようになりました。したがって、将来的には、変数にもう少し慎重に名前を付けて、何時間も壁に頭をぶつけないようにします。

于 2012-09-12T17:35:54.160 に答える
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 に答える