モデルにsqlステートメントがあります。
それから私は言います
$query = $this->db->query($sql, array(fields, fields1);
if ($query) {
return true:
} else {
echo "failed";
return false;
}
私のクエリは常に失敗しますが、データベースに送信されている正確なSQLステートメントをPHPに出力するにはどうすればよいですか?そして、私のPHPビュー、ページにそれを表示します
クエリ文字列を表示するには:
print_r($this->db->last_query());
クエリ結果を表示するには:
print_r($query);
プロファイラークラスは、ベンチマーク結果、実行したクエリ、およびページの下部に$ _POSTデータを表示します。プロファイラーを有効にするには、コントローラーメソッド内のどこかに次の行を配置します。
$this->output->enable_profiler(TRUE);
プロファイリングユーザーガイド: https://www.codeigniter.com/user_guide/general/profiling.html
これを使用できます:
$this->db->last_query();
「最後に実行されたクエリを返します(結果ではなく、クエリ文字列)。」
Reff: https://www.codeigniter.com/userguide3/database/helpers.html
ActiveRecordが生成したSQLを表示できます。
クエリを実行する前に:
$this->db->_compile_select();
そして、実行後:
$this->db->last_query();
クエリの簡単なテストが必要な場合、これは私にとって素晴らしい作品
echo $this->db->last_query(); die;
_compiled_select()
またはget_compiled_select()
を使用しようとして成功しなかった後、db
オブジェクトを印刷したところ、queries
プロパティでクエリを確認できます。
自分で試してください:
var_dump( $this->db );
クエリが1つしかないことがわかっている場合は、直接印刷できます。
echo $this->db->queries[0];
最後にこれを使用できます。
echo $this->db->last_query();
クエリを実行する前に印刷できる新しいパブリックメソッドget_compiled_select
があります。 _compile_select
は現在保護されているため、使用できません。
echo $this->db->get_compiled_select(); // before $this->db->get();
last_query()
とget_compiled_select()
のどちらも機能しないので、pedroのコードを少し変更するだけでうまく機能します。ビルドに->get()
を含めないでください。これは-> get()の前でなければなりません。
echo $this->EE->db->_compile_select();
@Chumillasの回答と@chhameedの回答を試みますが、SQLが間違っているため機能しません。新しいアプローチが見つかりました。like this:
return $sql;
の_compile_select
DB_active_rec.php
関数の前にecho $sql; flush(); exit;
を挿入します印刷するクエリの直後にこの行を追加します。
例:
$ query = $ this-> db-> query( 'SELECT * FROM table WHERE condition');
//この行を追加します。
var_dump($ this-> db-> last_query());
exit();
または
echo $ this-> db-> last_query();
私はまったく同じ問題を抱えていて、最終的に解決策を見つけました。私のクエリは次のように実行されます:
$result = mysqli_query($link,'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC ');
Sqlコマンドを表示するには、クエリとまったく同じ内容の変数($ resultstring)を作成し、次のようにエコーするだけでした:<?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>
できます!
クエリのSQLを取得するには多くの方法があります。
以下を使用する必要があります。
$sql = $this->db->last_query();
CodeIgnitierは、実行前にSQLを取得するジェネラリストの方法を提供していません。特定のメソッドを使用する必要があります。
$sql = $this->db->get_compiled_select()
$sql = $this->db->get_compiled_insert()
$sql = $this->db->get_compiled_update()
$sql = $this->db->get_compiled_delete()