2011-02-25 4 views
2

私はSQLクエリを文字列として与えてそのジョブを処理する必要のあるライブラリを開発中です。codeigniterアクティブなレコードですが、クエリを生成しますが実行しません。

私はCodeIgniterとそのデータベースクラスのアクティブレコード実装を使用しています。

私はこのようにSQL文をエコーすることができることを知っています...しかし、私はこのクエリを生成し、実行しないでください。

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

これを達成する助けがあれば助かります。

+0

何エコーについて見CI3前にそれを使用するにはget_compiled_select()

を使用することができます "{の$ this - > DB-> last_query()}"; ? – rabidmachine9

+0

私はクエリを実行せずにSQL文を取得しようとしています... – Peter

答えて

3

使用しているlast_query()関数はクエリ文字列を返しますが、それを実行しません。関数の戻り値をライブラリに使用する変数に代入してみてください。

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

これは最初にクエリを実行し、代わりに文字列sql、get_compiled_select/update/insertを取得します... – kreamik

+3

これはクエリ実行後のリターンです...答えは正しくないです – Florin

2

これは安全な練習ですが、DBオブジェクトはクエリでそのクエリはあなたが経由でそれを得ることができるので、属性保存する場合、私は知らない:クエリの配列を返します

$this->db->queries 

+0

これはすでに実行されているクエリですか? – Peter

+0

私たちがスコープをPHP5化するときにプライベートプロパティに変わる可能性のあるものと同じように、プロパティはこれのようにアクセスすべきではありません。しかし、はい、それはおそらく動作します。 –

+0

@Phil、クエリを実行せずにSQL文を取得する方法はありますか? – Peter

5

どの種類のクエリであるかによって異なります。挿入と更新には、これを可能にするメソッドがあります。少しハックと

$this->db->set('foo', $bar); 
$this->db->update_string('table'); // UPDATE table SET foo = "bar" 
+0

私は選択クエリを生成することを検討しています。 – Peter

+0

これは承認された回答である必要があります!まあ、これについて知ったことはありません! – NaturalBornCamper

6

あなたはそれがシステム/ DB_active_rec.phpに移動して、保護されたキーワードのフォーム_compile_selectメソッドを削除行うことができますし、今

return $this->db->_compile_select(); 

また$this->db->from('table');

代わりのget() GETので使用しますクエリを実行します ここに例があります

function index(){ 
    $this->db->select('blah blah'); 
    $this->db->from('table'); 
    $string = $this->db->_compile_select(); 
    return $string; 
} 
+0

これは正しい答えです – Florin