2013-11-23 6 views
20

를 통해 MSSQL합니다. 그러나연결 PHP는 PDO ODBC

Array ([0] => mysql [1] => odbc [2] => sqlite) 

, 내가 지금처럼 사용하려고 : 그것은 아무것도하지 않는

$handle = new PDO("odbc:Server=dbServerIpAddress,myportnumber;Database=mydatabase", "myusername", 'mypassword'); 

- 오류없이와 전혀 작동하지 않습니다. 그 라인을 지나치지도 않을거야!

PDO와 ODBC를 통해 어떻게이 MSSQL 데이터베이스에 PHP를 연결할 수 있습니까?

+1

사용중인 운영 체제 (및 버전)는 무엇입니까? –

+0

내 PHP는 CentOS Linux (mediatemple)에 있지만 MSSQL 데이터베이스는 Microsoft Dynamics (Great Plains)에서 제공됩니다. 나는 그것이 어떤 버전인지 모른다. 알아 내야합니까? 데이터베이스 사용자는 읽기 액세스 권한 만 가지고 있다고 나에게 말했다. – user1477388

답변

31

설정해야하는 몇 가지 구성 파일이 있습니다. /etc/odbc.ini, /etc/odbcinst.ini/etc/freetds/freetds.conf (이 위치는 Ubuntu 12.04에 유효하며 대부분의 * nixes에 적합 할 수 있음).

unixodbcfreetds (패키지 이름이 CentOS에 있는지 확실하지 않음)을 설치해야합니다. 우분투에서는 apt-get install unixodbc tdsodbc이됩니다. 이러한 설치에 대한 도움말

이 질문에

# Define a connection to a Microsoft SQL server 
# The Description can be whatever we want it to be. 
# The Driver value must match what we have defined in /etc/odbcinst.ini 
# The Database name must be the name of the database this connection will connect to. 
# The ServerName is the name we defined in /etc/freetds/freetds.conf 
# The TDS_Version should match what we defined in /etc/freetds/freetds.conf 
[mssql] 
Description    = MSSQL Server 
Driver     = freetds 
Database    = XXXXXX 
ServerName    = MSSQL 
TDS_Version    = 7.1 

/etc/odbcinst.ini Can't Install FreeTDS via Yum Package Manager

/etc/odbc.ini (이 파일이 비어있을 수 있습니다)를 볼

# Define where to find the driver for the Free TDS connections. 
# Make sure you use the right driver (32-bit or 64-bit). 
[freetds] 
Description = MS SQL database access with Free TDS 
Driver  = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so 
#Driver  = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so 
Setup  = /usr/lib/i386-linux-gnu/odbc/libtdsS.so 
UsageCount = 1 

/etc/freetds/freetds.conf (또는 /etc/freetds.conf에서 찾을 수 있습니다)

# The basics for defining a DSN (Data Source Name) 
# [data_source_name] 
#  host = <hostname or IP address> 
#  port = <port number to connect to - probably 1433> 
#  tds version = <TDS version to use - probably 8.0> 

# Define a connection to the Microsoft SQL Server 
[mssql] 
    host = XXXXXX 
    port = 1433 
    tds version = 7.1 

MSSQL의 버전에 따라 위의 tds version = 7.1 행을 변경해야 할 수도 있습니다.

변경 한 후에 아파치를 다시 시작해야합니다. PHP 코드에서

이처럼 PDO 개체를 만듭니다 : 사용자 이름의 형식에 있어야합니다

$pdo = new PDO("dblib:host=mssql;dbname=$dbname", "$dbuser","$dbpwd"); 

참고 : domain\username합니다.

또한 페이지에서 phpinfo()을 실행하고 freetds가 라이브러리 버전으로 나열된 mssql 섹션을 표시하는 "freetds"를 검색하면 작동한다는 것을 알 수 있습니다.

+0

고맙지 만 설치 방법을 잘 모르겠습니다. 나는 http://www.hosting.com/support/linux/installing-freetds-for-linux/와 같은 문서를 뽑았지만 나는 IIS 녀석이다! 나는 이것에 익숙하지 않다. ... 더 완전한 증거가 있는가? 나는 Plesk에 있는데 CentOS (mediatemple)라고 생각합니다. – user1477388

+1

링크에 필요한 드라이버를 설치해야한다고 나와 있습니다. SSH를 (putty (http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html)) 사용하고 (루트로)'yum install freetds'를 입력하여 FreeTDS를 설치할 수 있습니다 . 이런 일을하는 것이 불편하다면 Linux에 익숙한 사람을 찾으십시오. –

+0

나는 리눅스에서 일하는 사람을 알고 싶다! 나는 마이크로 소프트의 모든 사람들 만 알고 있습니다 ... 나는 그것을 포기하고 어떻게되는지 봅니다. 감사. – user1477388

32

허용되는 답변은 실제 PHP 호출에 따라 정답입니다. 누군가가 올바르게 주석을 달았으므로 ODBC 드라이버를 호출해야합니다. 두 번째로는 odbc.ini에 구성된 DSN (데이터 원본 이름)을 사용하지 않고 실제로 ad-hoc DSN을 만듭니다. 대신 : MSSQLODBC에서 DSN 객체를 참조

$pdo = new PDO("odbc:mssql", "$dbuser","$dbpwd"); 

.INI

다음과 같이 임시 DSN을 생성 할 수 있습니다

: MSSQL 지금 freetds.confFreeTDS를 드라이버 객체 odbcinst에서의 서버 객체를 참조

$pd = new PDO('odbc:DRIVER=FreeTDS;SERVERNAME=mssql;DATABASE=' . $dbName, 
       $dbuser, $dbpass); 

.ini

(댓글이 있어야하지만 담당자가 없습니다.)

+0

이것은 훌륭한 대답입니다. http://stackoverflow.com/questions/13066716/freetds-not-using-its-config# – chapskev

+0

이것은 나를 위해 일했다 : $ PD = new PDO ("odbc : DRIVER = FreeTDS; SERVER = ipaddress \ SQLEXPRESS; DATABASE = $ dbname ", $ username, $ password); – Jan