2012-09-12 2 views
0

내 문제는 기본적으로 PHP의 sqlsrv를 사용하여 SQL Server 2000 데이터베이스에 액세스해야하는 것을 선호하거나 저의 주위를 돌고 있습니다. 나는 프로젝트를 이미 SQL Server 2005에서 사용하여 모든 쿼리를 실행하고 ODBC PHP 드라이버와 같은 것으로 전환하는 작업은 꽤 큰 두통이 될 것입니다. 이제는 원래의 SQL Server 2000 데이터베이스와 2005가 동일한 컴퓨터에 설치되어 있고 그 사이에 연결된 서버를 만들었습니다. 2. Management Studio Express에서 테스트 할 때 테이블 중 하나에 간단한 쿼리를 실행하여 작업했습니다.연결된 서버가있는 SQLSRV

이제 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)를 반환처럼이를 테스트하기 위해 내 PHP 코드 보인다. 결과에서 fetch_array를 실행하면 잘못된 매개 변수가 sqlsrv_fetch_array로 전달되었음을 알 수 있습니다. 이 시점에서 무엇을해야할지 모르겠습니다. sqlsrv를 통해 연결된 서버에서 쿼리를 실행하는 데 문제가 있습니까?

+0

필자는 PHP에 매우 익숙하지 않지만, 테이블의 스키마를 보면 문제를 일으킬 수있는 비정상적인 필드를 표시하는 데 도움이 될 수 있습니다. 필드 유형이 잘못되어 있는지 궁금해하고 있습니다. DB에서 코드까지 ... –

답변

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'에 문제를 보여줍니다 제거합니다.

관련 문제