본문으로 바로가기

 

에러 발생 

라라벨 프로젝트에서 MSSQL 서버 연결을 시도하는데 아래 에러 메시지가 표시될 수 있다.

pdo_sqlsrv 드라이버가 로드되지 않아서 발생한다.

 

Error Message

Illuminate\Database\QueryException
could not find driver (SQL: select top 10 * from TA_ORDER_DATA)

 

드라이버 설치 확인

기존에 다른 프레임워크 혹은 레거시 코드로 MSSQL 서버와 연동을 하고 있었다면, 드라이버(so, dll) 자체가 없지는 않을 것이라 생각할 수 있지만 점검을 해 봐야 한다.

 

$ php -r "phpinfo();" | grep -i sqlsrv
Registered PHP Streams => https, ftps, compress.zlib, php, file, glob, data, http, ftp, sqlsrv, phar, zip
sqlsrv
sqlsrv support => enabled
sqlsrv.ClientBufferMaxKBSize => 10240 => 10240
sqlsrv.LogSeverity => 0 => 0
sqlsrv.LogSubsystems => 0 => 0
sqlsrv.SetLocaleInfo => 2 => 2
sqlsrv.WarningsReturnAsErrors => On => On

 

$ php -r "phpinfo();" | grep -i pdo
/etc/php/7.4/cli/conf.d/10-pdo.ini,
/etc/php/7.4/cli/conf.d/20-pdo_mysql.ini,
API Extensions => mysqli,pdo_mysql
PDO
PDO support => enabled
PDO drivers => mysql
pdo_mysql
PDO Driver for MySQL => enabled
pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock

 

드라이버가 있는것 같기도 하고 없는것 같기도 하고 아리송할 때는 phpinfo() 를 확인한다.

아래처럼 PDO drivers 항목에 sqlsrv 가 존재해야 한다.

 

 

드라이버 적용

간단히 모듈 로드를 시도해 본다.

 

$ phpenmod pdo_sqlsrv
WARNING: Module pdo_sqlsrv ini file doesn't exist under /etc/php/7.4/mods-available

 

간단히 안되는 경우 늘 그랬듯이 mods-available 디렉토리에 ini 파일을 생성하거나 적당한 파일에 추가한다.

php.ini 파일에 extension=pdo_sqlsrv.so 라인을 추가하는 방법도 있다.

 

$ cat /etc/php/7.4/mods-available/pdo.ini
; configuration for php common module
; priority=10
extension=pdo.so
extension=pdo_sqlsrv.so