QA@IT

Cygwin(Windows)上のfuelPHPからMSSQL(SQL Server)に接続できません。

9869 PV

前提・実現したいこと

FuelPHP+Cygwin+Apache+PDO DblibでMSSQL(SQLServer 2014)データベースに接続し、プログラムから操作したいと考えています。

環境:

  • Windows 10 および Windows Server 2012 R2
  • Cygwin
  • Apache 2.4.25 (Unix)
  • PHP 7.0.19
  • fuelPHP 1.8
  • freeTDS 1.00.37-1
  • SQL Server 2014

インストール済みPHPモジュール

bz2
Core
curl
date
dom
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
imap
intl
json
ldap
libxml
mbstring
mysqli
mysqlnd
openssl
pcre
PDO
pdo_dblib
pdo_mysql
PDO_ODBC
pdo_sqlite
readline
Reflection
session
SPL
standard
xml
zlib

発生している問題・エラーメッセージ

PHP直書きでPDOから呼び出すと正常に接続できますが、fuelPHP経由で接続しようとすると下記エラーが発生します。

2002!
Fuel\Core\Database_Exception [ 2002 ]:
SQLSTATE[HY000] [2002] No such file or directory

該当のソースコード

  • PHP直書きでうまくいったコード

            //PDOオブジェクトの生成
            $serverName = 'localhost';
            $database = 'DB名';
            $table = 'セレクトするテーブル名';
            $uid = 'ユーザー名';
            $pwd = 'パスワード';
            $conn = new PDO( "dblib:server=$serverName;Database = $database", $uid, $pwd); 
    
            //SQL 実行
            $sql = 'select * from '.$database.'.'.$table.';';
            echo $sql;
            $result = $conn->query($sql);
            // var_dump($result);
            foreach ($conn->query($sql) as $row) {
                var_dump($row);
                echo "";
            }
    
            // セッション解放 
            $conn = null;
    
  • 失敗したfuelPHP上のプログラム
    テストとして、
    hoge\fuel\app\classes\controller\welcome.php
    に下記のアクションを末尾に追加しました。

    public function action_dbtest()
    {
        $colums = array();
        $result = DB::select_array()->from('テーブル名')->execute();
        var_dump($result[1]);
        exit;
    }
    

    また、
    hoge\fuel\app\config\db.php
    は下記のように記述しています。

    return array(
    'active' => 'default',
    'default' => array(
        'type' => 'pdo',
        'connection' => array(
            'dsn' => 'dblib:server="localhost";Database="データベース名";',
            'username' => 'dbユーザー名',
            'password' => 'dbパスワード',
            'persistent' => false,
        ),
        'identifier' => '',
        'table_prefix' => NULL,
        'charset' => NULL,
    )
    );
    

試したこと

上記db.php

'dsn' => 'dblib:server="localhost";Database="データベース名";'

'dsn' => 'dblib:server="127.0.0.1";Database="データベース名";'

に変更するのは試していますが、接続できませんでした。

FreeTDS(/etc/freetds/freetds.conf)の設定

[localhost]
    host = 127.0.0.1 
    port = 1433
    tds version  =  12.0 

当方fuelPHPの初心者です。
日本語ドキュメントも確認してはいるのですが、解決には至っていません。
同様のエラーでmysqlの情報はネット上にあるのですが、mssqlについては同じ状況のトラブルについての情報が見つけられませんでした。

解決策をご存知の方がいらっしゃいましたら教えていただけましたら幸いです。
よろしくお願いいたします。

ウォッチ

この質問への回答やコメントをメールでお知らせします。