2014-12-16 23 views
2

PHP/Linux 환경에서 두 개의 MSSQL 서버를 연결해야합니다. 그래서 unixODBC와 PDO_ODBC를 사용하기로 결정했습니다. 서버 1에PDO_ODBC 및 unixODBC가 기본값이 아닌 포트와 MSSQL을 연결할 수 없습니다.

  • MSSQL : 이 10.10.10.8:14233 (비 기본 포트 번호)

내 생각 : 서버 2에 10.10.10.5:1433

  • MSSQL PDO_ODBC 또는 unixODBC의 포트 문제가 있습니다. 나는 아래에 몇 가지 코드를 시도했다.

    이 코드는 정상적으로 작동합니다. 성공적으로 연결되었습니다.

    $db = new PDO('odbc:Driver=SQL Server Native Client 11.0; Server=10.10.10.5; Port=1433; Database=dbname; UID=uid; PWD=pwd'); 
    

    이 코드는 작동하지 않습니다. 연결 실패.

    $db = new PDO('odbc:Driver=SQL Server Native Client 11.0; Server=10.10.10.8; Port=14233; Database=dbname; UID=uid; PWD=pwd'); 
    

    이상하게도이 코드는 잘못된 값으로 작동합니다. :(

    $db = new PDO('odbc:Driver=SQL Server Native Client 11.0; Server=10.10.10.5; Port=14233; Database=dbname; UID=uid; PWD=pwd'); 
    

    는 내가 다른 설정을 시도

    사람이 /etc/odbc.ini

    [odbc-erp] 
    Driver=SQL Server Native Client 11.0 
    Description=MSSQL 
    Trace=Yes 
    Server=10.10.10.8 
    Port=14233 
    Database=dbname 
    

    를 사용하여. PDO의 DSN에 설정 포트를 무시하고,이 코드는 연결을하지 않았다고 결론을 내렸다.

    $dbh = new PDO('odbc:odbc-erp', $uid, $pwd); 
    

    오류 메시지 :

    DB Error: SQLSTATE[HYT00] SQLConnect: 0 [unixODBC][Microsoft][SQL Server Native Client 11.0]Login timeout expired in /home/user/public_html/test/testodbc.php on line 40 
    

    및이 코드는 정상적으로 작동합니다.

    [odbc-mes] 
    Driver=SQL Server Native Client 11.0 
    Description=MSSQL 
    Trace=Yes 
    Server=10.10.10.5 
    Port=14233    // Wrong value (10.10.10.5 server port is 1433.) 
    Database=dbname 
    

    그리고이 코드는 연결하지 않았습니다.

    $dbh = new PDO('odbc:odbc-mes', $uid, $pwd); 
    

    포트가 모두 열렸습니다. tcpdump 연결 사용은 항상 ms-sql-s (1433)를 사용합니다. sqlcmd은 잘 작동합니다.

    # sqlcmd -U uid -P pwd -S 10.10.10.8,14233 -d OES 
    1> select @@version 
    2> go 
    
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
    Microsoft SQL Server 2008 R2 (SP2) - 10.50.4033.0 (X64) 
        Jul 9 2014 16:04:25 
        Copyright (c) Microsoft Corporation 
        Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) 
    
    
    (1 rows affected) 
    1> 
    

    제가 누락 된 부분이 있습니다. 아니면 mssql에 연결하는 다른 방법이 있습니까?

    • 에 CentOS 6.6
    • PHP는 5.5.19
    • SQLNCLI-11.0.1790.0

    -

    # rpm -qa 
    php-5.5.19-2.el6.remi.x86_64 
    php-mssql-5.5.19-2.el6.remi.x86_64 
    php-odbc-5.5.19-2.el6.remi.x86_64 
    php-pdo-5.5.19-2.el6.remi.x86_64 
    
    # sqlcmd 
    Microsoft (R) SQL Server Command Line Tool 
    Version 11.0.1790.0 Linux 
    Copyright (c) Microsoft Corporation. All rights reserved. 
    
    # cat /etc/sysconfig/selinux 
    SELINUX=disabled 
    SELINUXTYPE=targeted 
    
  • 답변

    5

    드라이버는 Port 키워드를 지원하지 않습니다.Per the documentation, 당신은 DSN에서 서버 이름 뒤에 포트를 추가해야합니다

    Server=10.10.10.5,14233 
    

    문서는 을 지원하는 키워드를 나열합니다.

    +0

    잘 작동합니다! 참조 해 주셔서 감사합니다. 사실, 그 설정을 시도했지만 연결이 불안정하여 오류가 발생했습니다. – ukits