web-dev-qa-db-ja.com

codeigniterモデルでSQLステートメントを印刷する方法

モデルにsqlステートメントがあります。

それから私は言います

$query = $this->db->query($sql, array(fields, fields1);

if ($query) {
    return true:
} else {
    echo "failed";
    return false;
}

私のクエリは常に失敗しますが、データベースに送信されている正確なSQLステートメントをPHPに出力するにはどうすればよいですか?そして、私のPHPビュー、ページにそれを表示します

97
Technupe

クエリ文字列を表示するには:

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

クエリ結果を表示するには:

print_r($query);

プロファイラークラスは、ベンチマーク結果、実行したクエリ、およびページの下部に$ _POSTデータを表示します。プロファイラーを有効にするには、コントローラーメソッド内のどこかに次の行を配置します。

$this->output->enable_profiler(TRUE);

プロファイリングユーザーガイド: https://www.codeigniter.com/user_guide/general/profiling.html

98
Novo

これを使用できます:

$this->db->last_query();

「最後に実行されたクエリを返します(結果ではなく、クエリ文字列)。」

Reff: https://www.codeigniter.com/userguide3/database/helpers.html

225
chhameed

ActiveRecordが生成したSQLを表示できます。

クエリを実行する前に:

$this->db->_compile_select(); 

そして、実行後:

$this->db->last_query(); 
39
pedro

クエリの簡単なテストが必要な場合、これは私にとって素晴らしい作品

echo $this->db->last_query(); die;
17
Programmer

_compiled_select()またはget_compiled_select()を使用しようとして成功しなかった後、dbオブジェクトを印刷したところ、queriesプロパティでクエリを確認できます。

自分で試してください:

var_dump( $this->db );

クエリが1つしかないことがわかっている場合は、直接印刷できます。

echo $this->db->queries[0];
12

最後にこれを使用できます。

echo $this->db->last_query();
9
Muhammad Sadiq

クエリを実行する前に印刷できる新しいパブリックメソッドget_compiled_selectがあります。 _compile_selectは現在保護されているため、使用できません。

echo $this->db->get_compiled_select(); // before $this->db->get();
8
Naveed

last_query()get_compiled_select()のどちらも機能しないので、pedroのコードを少し変更するだけでうまく機能します。ビルドに->get()を含めないでください。これは-> get()の前でなければなりません。

 echo $this->EE->db->_compile_select();
2
Laurence Cope

@Chumillasの回答と@chhameedの回答を試みますが、SQLが間違っているため機能しません。新しいアプローチが見つかりました。like this:

  • return $sql;_compile_selectDB_active_rec.php関数の前にecho $sql; flush(); exit;を挿入します
1
Chanble

印刷するクエリの直後にこの行を追加します。

例:

$ query = $ this-> db-> query( 'SELECT * FROM table WHERE condition');

//この行を追加します。

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

exit();

または

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

0
1247p

私はまったく同じ問題を抱えていて、最終的に解決策を見つけました。私のクエリは次のように実行されます:

$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 '; ?>

できます!

0
Mark Janssen

クエリのSQLを取得するには多くの方法があります。

クエリ実行後

以下を使用する必要があります。

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

クエリ実行前(特定のSQL命令メソッド)

CodeIgnitierは、実行前にSQLを取得するジェネラリストの方法を提供していません。特定のメソッドを使用する必要があります。

SELECTクエリを取得する

$sql = $this->db->get_compiled_select()

INSERTクエリを取得する

$sql = $this->db->get_compiled_insert()

UPDATEクエリを取得する

$sql = $this->db->get_compiled_update()

DELETEクエリを取得する

$sql = $this->db->get_compiled_delete()
0
jedema