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.