0
0

More than 1 year has passed since last update.

Codeigniter3で 実行したSQLを確認する方法

Posted at

最初に結論から言うと

データベース設定の save_query = true にして
model で $this->db->last_query() を実行すれば取れる。

解説

SQLの取得方法

公式のドキュメントには以下のように書いてあります

$this->db->last_query()

最後に実行されたクエリを返します (クエリの文字列で、結果ではありません)。例:

$str = $this->db->last_query();

// 次のように生成されます:  SELECT * FROM sometable....

でも出ないんだよ!!!

Modelの中で以下のように実行しても画面に表示される事がありませんでした。

echo $this->db->last_query();

どうやったら取得できるようになるの??

そんなときには・・・

application/config/database.php の中身を確認して!

インストールした当初に書かれているconfigの中に書かれている説明文にはこう書かれています。

|	['save_queries'] TRUE/FALSE - Whether to "save" all executed queries.
| 				NOTE: Disabling this will also effectively disable both
| 				$this->db->last_query() and profiling of DB queries.
| 				When you run a query, with this setting set to TRUE (default),
| 				CodeIgniter will store the SQL statement for debugging purposes.
| 				However, this may cause high memory usage, especially if you run
| 				a lot of SQL queries ... disable this to avoid that problem.

(英語ができない私が適当に)要約すると
こいつがTrueじゃないと$this->db->last_query()を実行しても 効力は無効になりますよと。
ただ、Trueにすると メモリ圧迫するかもしれないから気をつけてねと。

なので、
該当のパラメータを tureにしてあげてください。

$db['default'] = ['save_queries' => false];

公式には書いてないんだけどな

application/config/database.php の冒頭には下記のような記載が。

| -------------------------------------------------------------------
| DATABASE CONNECTIVITY SETTINGS
| -------------------------------------------------------------------
| This file will contain the settings needed to access your database.
|
| For complete instructions please consult the 'Database Connection'
| page of the User Guide.
|

(英語ができない私が適当に)要約すると
完全な手順については公式ガイドみてね

ってかいてあるわけさ。

だけど
公式のデータベース接続設定についてのページは以下

save_query のパラメータについては、落としてきたdatabase.phpの中にしか書かれていないという罠。

特定の環境にだけ適用させるほうがいいと思うよ!

CodeIgniter には、データベース接続用項目(ユーザ名、パスワード、データベース名など)を保存できる設定ファイルがあります。 設定ファイルは application/config/database.php にあります。また、特定の 環境 のためのデータベース接続用項目を設定をするため に、それぞれの環境の設定フォルダの中に database.php を置くこともできます。

https://codeigniter.jp/user_guide/3/database/configuration.html

公式にこう書いてあるとおり、
環境ごとに設定できるとあるので、本番でメモリ圧迫で動かないなんてことが発生しないように
開発環境だけに適用させるのをおすすめします!

最後に

みんなも気をつけてね!

クエリ見たかったら データベース設定の save_query を確認しようね!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0