Cara mencetak pernyataan SQL dalam model codeigniter


107

Saya memiliki pernyataan sql dalam model saya,

Saya kemudian berkata

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

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

Permintaan saya selalu gagal, bagaimana cara mendapatkan php untuk mencetak pernyataan sql yang tepat yang dikirim ke database saya? Dan tampilkan itu di tampilan php saya, halaman

Jawaban:


124

Untuk menampilkan string kueri:

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

Untuk menampilkan hasil query:

print_r($query);

Kelas Profiler akan menampilkan hasil benchmark, kueri yang telah Anda jalankan, dan data $ _POST di bagian bawah halaman Anda. Untuk mengaktifkan profiler, letakkan baris berikut di mana saja dalam metode Controller Anda:

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

Panduan pengguna profil: https://www.codeigniter.com/user_guide/general/profiling.html


7
ketika saya melakukan print_r ($ query); tidak ada yang tercetak sama sekali
Technupe

1
Gunakan CI built in profiler, info lebih lanjut di sini
Novo

2
yang ingin saya lakukan hanyalah mencetak pernyataan sql yang diteruskan ke database, sory tetapi profiler tidak banyak membantu
Technupe

Kunjungi tautan panduan pengguna yang saya posting, jika tidak berfungsi, beri tahu kami apa yang terjadi.
Novo

Yah saya pikir masalah saya, oracle tidak menerima format tanggal saya, ive mencoba semua format yang saya pikir, itu hanya akan menerima SYSDATE
Technupe


41

Anda dapat menampilkan SQL yang dihasilkan ActiveRecord:

Sebelum kueri dijalankan:

$this->db->_compile_select(); 

Dan setelah itu berjalan:

$this->db->last_query(); 

4
ketika saya menggunakan $ this-> db -> _ compile_select (); saya mendapatkan kesalahan Fatal: Panggilan ke metode dilindungi CI_DB_active_record :: _ compile_select () dari
Angelin Nadar

Hal profiler tidak baik untuk saya, tidak menunjukkan query yang saya inginkan, terlalu rumit untuk hanya mendapatkan SQL ... Ini bekerja untuk saya: - echo $ this-> EE-> db -> _ compile_select ();
Laurence Cope

3
Di CI3, Gunakan $this->db->get_compiled_select()sebagai gantinya.
Nick Tsai

17

jika Anda memerlukan pengujian cepat atas kueri Anda, ini sangat cocok untuk saya

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

14

Setelah mencoba tanpa hasil untuk menggunakan _compiled_select()atau get_compiled_select()saya baru saja mencetak dbobjek, dan Anda dapat melihat kueri di sanaqueries properti.

Cobalah sendiri:

var_dump( $this->db );

Jika Anda tahu Anda hanya memiliki satu kueri, Anda dapat mencetaknya secara langsung:

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

9

Ada metode publik baru get_compiled_selectyang dapat mencetak kueri sebelum menjalankannya. _compile_selectsekarang dilindungi oleh karena itu tidak dapat digunakan.

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

4
Kesalahan fatal: Panggilan ke metode yang tidak ditentukan CI_DB_mysql_driver :: get_compiled_select ()
itskawsar


2

Tidak ada last_query()atau tidak get_compiled_select()berfungsi untuk saya, jadi sedikit perubahan kode pedro berhasil untuk saya. Jangan sertakan ->get()dalam build Anda, ini harus sebelum -> get ()

 echo $this->EE->db->_compile_select();

1

Saya mencoba untuk jawaban @ Chumillas dan jawaban @ chhameed, tetapi tidak berhasil, karena sql-nya salah, jadi saya menemukan pendekatan baru, seperti ini:

  • Masukkan echo $sql; flush(); exit;ke dalam return $sql; _compile_selectfungsi sebelumDB_active_rec.php

0

Tambahkan baris ini tepat setelah kueri yang ingin Anda cetak.

Contoh:

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

// Tambahkan baris ini.

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

keluar();

atau

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


0

Saya menggunakan xdebug untuk melihat nilai-nilai ini di VSCode dengan ekstensi masing-masing dan CI v2.x. Saya menambahkan ekspresi $this->db->last_query()di bagian arloji, dan saya menambahkan xdebugSettingssimpul seperti baris ini untuk mendapatkan nilai non-pemotongan di launch.json.

{
  "name": "Launch currently open script",
  "type": "php",
  "request": "launch",
  "program": "${file}",
  "cwd": "${fileDirname}",
  "port": 9000,
  "xdebugSettings": {
    "max_data": -1,
    "max_children": -1
  }
},

Dan jalankan debuger saya dengan breakpoint dan terakhir pilih ekspresi saya dan klik kanan> salin nilai.


-1

Saya memiliki masalah yang persis sama dan akhirnya menemukan solusinya. Kueri saya berjalan seperti:

$result = mysqli_query($link,'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC ');

Untuk menampilkan perintah sql, yang harus saya lakukan adalah membuat variabel ($ resultstring) dengan konten yang sama persis dengan kueri saya dan kemudian menggemakannya, seperti ini:<?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>

Berhasil!


Ini bukan cara CodeIgniter.
mickmackusa

-1

gunakan get_compiled_select()untuk mengambil kueri alih-alih menggantinya


Saya menyarankan untuk menunjukkan bagaimana menggunakan fungsi yang Anda usulkan dalam kasus khusus ini, tidak hanya menyebutkannya. Salam
YakovL

-2

Saya membaca semua jawaban di sini, tetapi tidak bisa

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

bekerja, Ini memberi saya kesalahan seperti,

Panggilan ke metode yang dilindungi CI_DB_active_record :: _ compile_select () dari konteks 'Selamat datang' di pengontrol pada baris xx

Jadi saya menghapus protecteddari baris di bawah ini dari file \system\database\DB_active_rec.phpdan berhasil

protected function _compile_select($select_override = FALSE)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.