teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

DSN書式を追記

2017/09/11 11:44

投稿

Tomak
Tomak

スコア1652

answer CHANGED
@@ -1,30 +1,51 @@
1
- PDOの`dsn`の書式が違いますがタイプミスでしょうか?
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="ホスト名";dbname="データベース名";',
11
+ 'dsn' => 'dblib:host=ホスト名:ポート番号;dbname=データベース名',
5
12
  ```
6
13
 
7
- タイプミスでなければ下記のようにDB接続設定を変更します。
14
+ SQLEXPRESSの場合は下記のようにします。
8
15
 
9
16
  ```php
17
+ 'dsn' => 'dblib:host=ホスト名:ポート番号\\SQLEXPRESS;dbname=データベース名',
18
+ ```
19
+
20
+ FuelPHPのDB接続設定を下記のようにします。
21
+
22
+ ```php
10
- // fuel/app/config/db.php
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' => 'dblib:host="localhost";dbname="データベース名";',
29
+ 'dsn' => 'dblib:host=localhost:1433;dbname=データベース名', //修正
17
- 'username' => 'dbユーザー名',
30
+ 'username' => 'dbユーザー名',
18
- 'password' => 'dbパスワード',
31
+ 'password' => 'dbパスワード',
19
32
  'persistent' => false,
20
33
  ),
21
- 'identifier' => '`',
34
+ 'identifier' => '',
22
- 'table_prefix' => NULL,
35
+ 'table_prefix' => NULL,
23
- 'charset' => NULL,
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
+