2012年6月12日火曜日

FuelPHPでpdo_dblibがつながらない?

Fuel\Core\Database_Exception [ Error ]: SQLSTATE[01002] Adaptive Server connection failed (severity 9)


PHPで普通に?PDOでMSSQLには繋がるけどFuelPHPを通すと繋がらない。。。
return array(
    'default' => array(
        'connection' => array(
            'dsn'        => 'dblib:host=<hostname>;dbname=<databasename>',
            'username'   => 'sa',
            'password'   => '',
        ),
    ),
);

db.phpはこんなかんじです。

繋がるソース↓
 $pdo = new PDO("dblib:host=<hostname>;dbname=<database>", "sa", "");

何が違うのか。。。

2012.6.13
動くようになりました。
アドバイスを頂いてなんとか動かすことができました。

まず、app/config/config.phpでlocaleを設定します。
return array(
 (省略)
  'locale' => 'ja_JP.utf8',
 (省略)
);

するとエラーメッセージが変わりました。
PDOException [ HY000 ]: SQLSTATE[HY000]: General error: 195 General SQL Server error: Check messages from the SQL Server [195] (severity 15) []

いろいろ調べてみるとMSSQL 2005/2008でset namesはサポートしてない?
(今回はMSSQL 2005で試してました)
データベース接続は初期値がutf8となっているのでこれを空にしてやることで回避できました。
これでクエリビルダを利用してSQLを実行すると動作が確認できました。
が、モデルを利用してfind_allで実行するとエラー。(`)が邪魔してうまく実行ができませんでした。

ただ、上の二つ(set namesの回避と(`))はdb.phpを修正することでエラー回避ができました。
return array(
    'default' => array(
        'connection' => array(
            'dsn'        => 'dblib:host=<hostname>;dbname=<databasename>',
            'username'   => 'sa',
            'password'   => '',
        ),
        'identifier' => '', // 空白を指定
        'charset'   => '', // 空白を指定
    ),
);

最終的にはこんなかんじのdb.phpとなりました。
とりあえず動いてよかったー。


0 件のコメント:

コメントを投稿