回答編集履歴

1

DSN書式を追記

2017/09/11 11:44

投稿

Tomak
Tomak

スコア1652

test CHANGED
@@ -1,22 +1,48 @@
1
+ > SQLSTATE[HY000] [2002] No such file or directory
2
+
3
+
4
+
5
+ 上記エラーメッセージは、DBの接続に失敗していて、DSNの書式の問題だったり、FuelPHPの設定の問題だったりします。(単純にDBが起動していなくても同じようなメッセージが出ます)
6
+
7
+ MSSQL側の問題にもエラーログが残っているはずですので参考のために確認してみるとよいかもしれません。
8
+
9
+
10
+
11
+ 生のPHPだと接続できるということなので、疑わしいのはFuelPHP側の設定ということになるのできちんとチェックします。
12
+
13
+
14
+
1
- PDOの`dsn`の書式が違いますがタイプミスでしょうか?
15
+ PDOの`dsn`の書式を下記のようにします
2
16
 
3
17
 
4
18
 
5
19
  ```php
6
20
 
7
- 'dsn' => 'dblib:host="ホスト名";dbname="データベース名";',
21
+ 'dsn' => 'dblib:host=ホスト名:ポート番号;dbname=データベース名',
8
22
 
9
23
  ```
10
24
 
11
25
 
12
26
 
13
- タイプミスでなければ下記のようにDB接続設定を変更します。
27
+ SQLEXPRESSの場合は下記のようにします。
14
28
 
15
29
 
16
30
 
17
31
  ```php
18
32
 
33
+ 'dsn' => 'dblib:host=ホスト名:ポート番号\\SQLEXPRESS;dbname=データベース名',
34
+
35
+ ```
36
+
37
+
38
+
39
+ FuelPHPのDB接続設定を下記のようにします。
40
+
41
+
42
+
43
+ ```php
44
+
19
- // fuel/app/config/db.php
45
+ //fuel/app/config/db.php
20
46
 
21
47
  return array(
22
48
 
@@ -28,27 +54,43 @@
28
54
 
29
55
  'connection' => array(
30
56
 
31
- 'dsn' => 'dblib:host="localhost";dbname="データベース名";',
57
+ 'dsn' => 'dblib:host=localhost:1433;dbname=データベース名', //修正
32
58
 
33
- 'username' => 'dbユーザー名',
59
+ 'username' => 'dbユーザー名',
34
60
 
35
- 'password' => 'dbパスワード',
61
+ 'password' => 'dbパスワード',
36
62
 
37
63
  'persistent' => false,
38
64
 
39
65
  ),
40
66
 
41
- 'identifier' => '`',
67
+ 'identifier' => '',
42
68
 
43
- 'table_prefix' => NULL,
69
+ 'table_prefix' => NULL,
44
70
 
45
- 'charset' => NULL,
71
+ 'charset' => 'UTF-8', //修正
72
+
73
+ 'enable_cache' => true, //好みで変更
74
+
75
+ 'profiling' => true, //FuelPHPデバッグコンソールにSQLデバッグが自動で表示されるようになります
76
+
77
+ 'readonly' => false, //追加(スレーブサーバの定義配列)
46
78
 
47
79
  )
48
80
 
49
81
  );
50
82
 
51
83
  ```
84
+
85
+
86
+
87
+ 詳しい仕様は`FuelPHPのDB設定`を参照してください。
88
+
89
+ [http://fuelphp.jp/docs/1.8/classes/database/introduction.html](http://fuelphp.jp/docs/1.8/classes/database/introduction.html)
90
+
91
+
92
+
93
+ 上記文字コード(charset)は、UTF-8を変換せずそのままなら問題ないと思います。CP932をlibiconvで自動変換している場合も変更する必要はないと思いますが、CP932に統一したい場合は変更します。ここの連想配列の値はMSSQLがサポートする値でなければいけません。
52
94
 
53
95
 
54
96
 
@@ -96,8 +138,38 @@
96
138
 
97
139
  var_dump($result);
98
140
 
141
+ }
142
+
143
+ ```
144
+
145
+
146
+
147
+ SQLクエリの結果をORMモデルのオブジェクトで受け取りたい場合は下記のようにします。
148
+
149
+
150
+
99
- exit;
151
+ ```php
152
+
153
+ public function action_dbtest()
154
+
155
+ {
156
+
157
+ $result = \DB::select_array()
158
+
159
+ ->from('テーブル名')
160
+
161
+ ->as_object('\Model_モデル名')
162
+
163
+ ->execute(); //ORM \Model_モデル名オブジェクトで結果を取得
164
+
165
+
166
+
167
+ var_dump($result);
100
168
 
101
169
  }
102
170
 
103
171
  ```
172
+
173
+
174
+
175
+