2017-10-29 1 views
1

odbc_exec을 사용하여 로컬 DB (SQL Server 2016)에서 저장 프로 시저를 실행하고 레코드를 결과로 반환 할 것으로 예상합니다. 그러나 결과 필드 이름 (odbc_field_name)은 모두 비어 있습니다.PHP : odbc_exec 쿼리의 필드 이름이 비어 있습니다.

레코드의 값이 정확합니다. 그리고 SSMS에서 쿼리를 실행하면 결과가 잘 보입니다. 다음은 샘플 코드입니다.

PHP :

$connection = odbc_connect("Driver={SQL Server Native Client 11.0};Server=$myServer;Database=$myDB;", $myUser, $myPass) or die("Couldn't connect to SQL Server on $myServer"); 
$query = "dbo.[TestSP]"; 
$result = odbc_exec($connection,$query) or die(odbc_error($connection)); 
$counter = 0; 
while($counter < odbc_num_fields($result)) 
{ 
    $counter = $counter + 1; 
    $test_str.= odbc_field_name($result,$counter)."\n"; 
} 
$file = 'log.txt'; 
$current = file_get_contents($file); 
$current .= $test_str; 
file_put_contents($file, $current); 

SQL : 어떤 제안이 5.4에서 7.0으로 PHP를 업그레이드 한 후

그것은 작동 업데이트 이해할 수있을 것이다

CREATE PROC [dbo].[TestSP] AS 
BEGIN 
    SET NOCOUNT ON; 
    SELECT '1' as first_column, '2' as second_column 
END 

. 아직도 그것이 일어나는 이유를 모르겠다 ... 나는 PHP 설정을 나중에 비교할 것이고 내가 무엇인지 식별한다면 그것을 업데이트 할 것이다. 모든 도움을 주셔서 감사합니다.

+0

특정 SQL을 붙여 넣으면 도움이 될 것이라고 생각합니다. – yakobom

+0

@yakobom 제안에 감사드립니다. 그냥 –

+0

추가 5.4에서 7.0으로 PHP를 업그레이드 한 후에 작동합니다. 나는 왜 그런 일이 일어나는 지 아직 확신하지 못하고있다. 나중에 세부 사항을 추적 할 시간이 있기를 바랍니다. 모든 도움 주셔서 감사합니다. –

답변

0

그 모양은 이어야합니다.이어야합니다. 하지만이 시점에서 ODBC 코드는 상당히 오래된 코드 일 것입니다. PDO로 전환 할 수 없다면 연관 배열 검색을 시도해보십시오. (이 드라이버 그냥하지만 ​​그 정보를 얻을하지 않습니다 가능성이 있습니다.)

$connection = odbc_connect("Driver={SQL Server Native Client 11.0};Server=$myServer;Database=$myDB;", $myUser, $myPass) or die("Couldn't connect to SQL Server on $myServer"); 
$query = "dbo.[TestSP]"; 
$result = odbc_exec($connection, $query) or die(odbc_error($connection)); 
$row = odbc_fetch_array($result); 
odbc_free_result($result); 

foreach ($row as $k=>$v) 
{ 
    $test_str.= "$k\n"; 
} 
$file = 'log.txt'; 
file_put_contents($file, $test_str, FILE_APPEND); 

참고 또한 file_put_contents을 추가 할 수 있습니다!

관련 문제