sysadmin이 PHP 서버를 5.2에서 5.5로 업그레이드하고 있습니다. 결과적으로 mssql 계열의 함수가 없어지고 코드를 업데이트해야합니다 (ODBC 함수 또는 sqlsrv 함수처럼 보입니다). 불행히도, 간단한 쿼리를 넘어선 어떤 것도 제대로 작동하지 않는 것으로 보입니다.PHP 5.5 (MS) SQL 서버 기능이 예상대로 작동하지 않습니다.
내가 (추가 중간 선이 유일한 변화) 아래 다음과 같은 두 가지 변종에 문제가있는 쿼리 중 하나 감소했습니다 내가 SQL 서버 Mangement 스튜디오에서 그들을 시도
IF OBJECT_ID('tempdb..#i') IS NOT NULL BEGIN DROP TABLE #i END
SELECT 'value' as test
IF OBJECT_ID('tempdb..#i') IS NOT NULL BEGIN DROP TABLE #i END
CREATE TABLE #i (id INT primary key) INSERT INTO #i SELECT 405782
SELECT 'value' as test
은 모두 잘 작동하고 한 행을 반환합니다. 내가 PHP에서 첫 번째 시도 할 때, 그것은 잘 작동하고 하나의 행을 반환합니다. 내가 PHP에서 두 번째 쿼리를 실행하려고 할 때 그러나, 나는 예상치 못한 결과를 얻을 :
$SQL_query= '********'; //Second query
$serverName = '**********';
$connectionInfo = array("Database"=>"*****","UID"=>"********","PWD"=>"*********");
$conn = sqlsrv_connect($serverName, $connectionInfo);
$msg1=sqlsrv_errors(SQLSRV_ERR_ALL); // ""
if($conn){ //truthy
$result=sqlsrv_query($conn,$SQL_query);
if(sqlsrv_has_rows ($result)){$rows='true';}else{$rows='false';} //false
$msg2=sqlsrv_errors(SQLSRV_ERR_ALL); // ""
$row=sqlsrv_fetch_array($result,SQLSRV_FETCH_NUMERIC) //false
}
(는 ODBC의 기능은 쿼리가 SET의 @var 문이 포함 된 경우 ... 질식, 더 악화했다)
따라서 쿼리 결과가 잘못되었지만 오류가보고되지 않습니다.
누구든지 설명 할 수 있습니까? 이 함수들로 처리 할 수있는 쿼리의 범위가 어떻게 든 제한되어 있다면, 최소한이 함수들에 대한 PHP 문서를 통과 할 때 언급 될 것이라고 생각할 것입니다.
참조 : Microsoft SQL Server Standard Edition 9.00.1406.00, PHP 5.5.19 x86 스레드 안전성이 비활성화되었으며 Windows에서 실행 중입니다.
편집 : Rob Pharley의 제안에 따라 @@ OPTIONS가 문제를 재현하는 데있어 동일하거나 중요하지 않음을 확인했습니다.
'SET NOCOUNT ON;'이 트릭을 수행했습니다! 답변에 의견을 말하면 현상금 –
완료 - 답변이 맞는지 또는 다른 'SET NOCOUNT OFF'가 필요한지 확인하십시오. –
예제 쿼리의 경우 다시 설정하지 않아도됩니다. 더 큰 결과 집합을 위해 그렇게해야 할 필요가 발견되면 후속 조치 의견을 드리겠습니다. –