2012-07-23 2 views
10

SQLSRV 드라이버 대 PDO 드라이버 (MS SQL 서버가있는 PHP 용)를 선택할 때 고려해야 할 사항은 무엇입니까?SQLSRV 드라이버 대 MS SQL Server가있는 PHP 용 PDO 드라이버

이 이전 Stackoverflow 게시물 (When using PHP on Windows, what is better (1) the native driver for SQL Server or (2) the PDO driver?)을 보았지만 대답이 조금 부족한 것처럼 보였고 this article에서 언급 한 것처럼 SQLSRV 드라이버를 사용하는 모든 이점을 언급하지 않았습니다.

저는 포괄적이고 최신 정보를 찾고 있습니다 (예 : SQLSRV 드라이버는 Windows에서만 사용할 수 있습니까?). 프로그래머가 리소스로 참조 할 수있는 대답을 찾고 있습니다.

답변

7

PDO를 사용하면 DB 중립적 인 코드를 작성할 수 있습니다.

진정한 DB 중립성을 원한다면 NotORM과 같은 전체 DB 추상화 레이어를 사용하고 싶다면 일반 PDO와 마찬가지로 SQL 구문의 차이점에주의해야하지만 기본 PHP는 코드는 DB 중립적 일 것입니다.

DB 중립성이 중요하지 않은 것처럼 보일 수도 있습니다. SQL Server를 사용하고 있다면, 그게 무엇이 필요한지 말한 것 같습니다.하지만 상황이 어떻게 변할지 예측할 수는 없습니다. 미래는 DB 중립 드라이버와 DB 전용 드라이버 사이에서 선택이 가능하고 선호도에 대한 다른 이유가 없다면 중립적 인 드라이버를 선택하십시오. 회사가 인수되어 새 사장이 Oracle을 DB로 사용하려는 경우 훨씬 쉽게!

또한 DB 중립적이기 때문에 PDO는 PHP 커뮤니티에서보다 표준적이고 더 잘 알려져 있습니다. MSSQL 드라이버보다 온라인 사이트 (이와 같은)에서 PDO에 대한 많은 도움을 얻을 수 있습니다.

10

SQLSRV와 PDO_SQLSRV는 모두 current-generation php drivers available from Microsoft입니다.하지만 SQL Server Native Client 11에서는 동일한 코드가 사용됩니다. (Mac OS 또는 Linux 버전의 PHP 드라이버가없는 이유입니다. 두 패키지의 성능입니다.) 드라이버는 비슷해야합니다. 그것은 당신이 선호하는 API의 문제 일뿐입니다.

대부분의 경우 플랫폼 간 고려 사항 때문에 PDO_SQLSRV 드라이버를 사용합니다. 그러나 PDO_SQLSRV가 모든 것을 문자열로 반환하는 반면 기본 SQL Server 데이터 유형의 [맵]으로 데이터를 반환하기 때문에 새로운 (소) 프로젝트 용 두 드라이버를 살펴본 후 SQLSRV 드라이버와 함께갔습니다.

그래서 당신의 SQL 인 경우 :

SELECT 1234 as integer, Cast(123.456 as float) as float, 
     getdate() as date, '1234' as string1,'123.456' as string2; 

그런 다음 PDO_SQLSRV에서 행 위해서 var_dump는 제공하십시오 SQLSRV 드라이버가 제공

array(1) { 
    [0] => 
    array(5) { 
     'integer' => 
     string(4) "1234" 
     'float' => 
     string(7) "123.456" 
     'date' => 
     string(23) "2012-12-06 22:35:05.373" 
     'string1' => 
     string(4) "1234" 
     'string2' => 
     string(7) "123.456" 
    } 
    } 

동안 : 그것은 나에게 견과류를 몰고

array(1) { 
    [0] => 
    array(5) { 
     'integer' => 
     int(1234) 
     'float' => 
     double(123.456) 
     'date' => 
     class DateTime#1 (3) { 
     ... 
     } 
     'string1' => 
     string(4) "1234" 
     'string2' => 
     string(7) "123.456" 
    } 
    } 

PDO_SQLSRV는 내가 원하는지 여부에 관계없이 모든 데이터를 문자열로 변환하므로 SQLSRV를 사용했습니다. (나는 ReturnDatesAsStrings=true을 설정해야한다는 것을 인정해야한다. 왜냐하면 나는 데이트 클래스를 다루기에는 너무 게으르다.)

나는 조금 더 나은 문법을 좋아하지만 그것은 나 뿐이다.

4

Microsoft는 마침내 PHP로 잘 작동하도록 기본 드라이버를 조정하는 데 필요한 리소스를 다하고 있습니다. 나는 현재 아파치 2.4 64 비트에서 베타 테스트를하고있다.

Beta PHP 7 SQL_SRV 64Bit Driver

관련 문제