PDO 経由で MSSQL データベースに接続しようとすると、FuelPHP が奇妙なことをしているようです。
FuelPHP の外で作業する
ローカル サーバーのバニラ PHP ページで次のことを試しました。
<?php
$mssql = new \PDO('dblib:host=<IP OF HOST>;dbname=<DBNAME>', '<USER>', '<PASS>');
そして、すべてがうまくいきます。接続され、期待どおりに簡単に DB にクエリを実行できます。
FuelPHP 内で作業しない
ただし、基本的に同じ情報で config/db.php に接続を追加しようとすると、例外がスローされます。
<?php
return array(
'mssql' => array(
'connection' => array(
'dsn' => 'dblib:host=<IP OF HOST>;dbname=<DBNAME>',
'username' => '<USER>',
'password' => '<PASS>',
),
'type' => 'pdo',
'table_prefix' => '',
),
);
その後、次のように FuelPHP 内で DB にクエリを実行してみてください。
$q = \DB::select()
->from('table')
->limit(5);
$r = $q->execute('mssql');
次の例外がスローされます。Fuel\Core\Database_Exception [ 20002 ]: SQLSTATE[01002] Adaptive Server connection failed (severity 9)
FuelPHPのコントローラー内で元の基本的な接続を実行しようとすると、同じエラーメッセージが表示されます。そのため、FuelPHP は通常の PDO 接続でさえ大混乱を引き起こしているようです。
FuelPHP コントローラー内での基本的な接続試行の例。
<?php
class Controller_Welcome extends Controller
{
public function action_index()
{
$mssql = new \PDO('dblib:host=<IP OF HOST>;dbname=<DBNAME>', '<USER>', '<PASS>');
}
}
参考までに、私は PHP 5.3.16 を使用し、FreeTDS を使用して OS X ラップトップから接続しています。(ただし、バニラ バージョンが動作するため、これは問題にはなりません。)