回答編集履歴
1
DSN書式を追記
answer
CHANGED
@@ -1,30 +1,51 @@
|
|
1
|
-
|
1
|
+
> SQLSTATE[HY000] [2002] No such file or directory
|
2
2
|
|
3
|
+
上記エラーメッセージは、DBの接続に失敗していて、DSNの書式の問題だったり、FuelPHPの設定の問題だったりします。(単純にDBが起動していなくても同じようなメッセージが出ます)
|
4
|
+
MSSQL側の問題にもエラーログが残っているはずですので参考のために確認してみるとよいかもしれません。
|
5
|
+
|
6
|
+
生のPHPだと接続できるということなので、疑わしいのはFuelPHP側の設定ということになるのできちんとチェックします。
|
7
|
+
|
8
|
+
PDOの`dsn`の書式を下記のようにします。
|
9
|
+
|
3
10
|
```php
|
4
|
-
'dsn' => 'dblib:host=
|
11
|
+
'dsn' => 'dblib:host=ホスト名:ポート番号;dbname=データベース名',
|
5
12
|
```
|
6
13
|
|
7
|
-
|
14
|
+
SQLEXPRESSの場合は下記のようにします。
|
8
15
|
|
9
16
|
```php
|
17
|
+
'dsn' => 'dblib:host=ホスト名:ポート番号\\SQLEXPRESS;dbname=データベース名',
|
18
|
+
```
|
19
|
+
|
20
|
+
FuelPHPのDB接続設定を下記のようにします。
|
21
|
+
|
22
|
+
```php
|
10
|
-
//
|
23
|
+
//fuel/app/config/db.php
|
11
24
|
return array(
|
12
25
|
'active' => 'default',
|
13
26
|
'default' => array(
|
14
27
|
'type' => 'pdo',
|
15
28
|
'connection' => array(
|
16
|
-
'dsn'
|
29
|
+
'dsn' => 'dblib:host=localhost:1433;dbname=データベース名', //修正
|
17
|
-
'username'
|
30
|
+
'username' => 'dbユーザー名',
|
18
|
-
'password'
|
31
|
+
'password' => 'dbパスワード',
|
19
32
|
'persistent' => false,
|
20
33
|
),
|
21
|
-
'identifier'
|
34
|
+
'identifier' => '',
|
22
|
-
'table_prefix'
|
35
|
+
'table_prefix' => NULL,
|
23
|
-
'charset'
|
36
|
+
'charset' => 'UTF-8', //修正
|
37
|
+
'enable_cache' => true, //好みで変更
|
38
|
+
'profiling' => true, //FuelPHPデバッグコンソールにSQLデバッグが自動で表示されるようになります
|
39
|
+
'readonly' => false, //追加(スレーブサーバの定義配列)
|
24
40
|
)
|
25
41
|
);
|
26
42
|
```
|
27
43
|
|
44
|
+
詳しい仕様は`FuelPHPのDB設定`を参照してください。
|
45
|
+
[http://fuelphp.jp/docs/1.8/classes/database/introduction.html](http://fuelphp.jp/docs/1.8/classes/database/introduction.html)
|
46
|
+
|
47
|
+
上記文字コード(charset)は、UTF-8を変換せずそのままなら問題ないと思います。CP932をlibiconvで自動変換している場合も変更する必要はないと思いますが、CP932に統一したい場合は変更します。ここの連想配列の値はMSSQLがサポートする値でなければいけません。
|
48
|
+
|
28
49
|
質問とは関係なく、ご存知かもしれませんが`FuelPHP`ではSQL文デバッグは下記のように行います。
|
29
50
|
|
30
51
|
```php
|
@@ -47,6 +68,20 @@
|
|
47
68
|
$result = $query->execute();
|
48
69
|
|
49
70
|
var_dump($result);
|
50
|
-
exit;
|
51
71
|
}
|
52
|
-
```
|
72
|
+
```
|
73
|
+
|
74
|
+
SQLクエリの結果をORMモデルのオブジェクトで受け取りたい場合は下記のようにします。
|
75
|
+
|
76
|
+
```php
|
77
|
+
public function action_dbtest()
|
78
|
+
{
|
79
|
+
$result = \DB::select_array()
|
80
|
+
->from('テーブル名')
|
81
|
+
->as_object('\Model_モデル名')
|
82
|
+
->execute(); //ORM \Model_モデル名オブジェクトで結果を取得
|
83
|
+
|
84
|
+
var_dump($result);
|
85
|
+
}
|
86
|
+
```
|
87
|
+
|