Kod işaretleyici modelinde SQL ifadesi nasıl yazdırılır


107

Modelimde bir sql ifadem var,

Sonra söylüyorum

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

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

Sorgum her zaman başarısız oluyor, veritabanıma gönderilen tam sql ifadesini yazdırmak için php'yi nasıl edinebilirim? Ve bunu php görünümümde görüntüle,

Yanıtlar:


124

Sorgu dizesini görüntülemek için:

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

Sorgu sonucunu görüntülemek için:

print_r($query);

Profiler Sınıfı, kıyaslama sonuçlarını, çalıştırdığınız sorguları ve $ _POST verilerini sayfalarınızın altında görüntüler. Profil oluşturucuyu etkinleştirmek için aşağıdaki satırı Denetleyici yöntemlerinizin herhangi bir yerine yerleştirin:

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

Profil oluşturma kullanıcı kılavuzu: https://www.codeigniter.com/user_guide/general/profiling.html


7
print_r ($ sorgu) yaptığımda; hiçbir şey yazdırılmıyor
Technupe

1
Dahili CI profil oluşturucuyu kullanın, daha fazla bilgi için burada
Novo

2
Yapmak istediğim tek şey, veritabanına iletilen sql ifadesini yazdırmak, üzgünüm ama profil oluşturucu da pek yardımcı olmuyor
Technupe,

Yayınladığım kullanım kılavuzu bağlantısını ziyaret edin, çalışmıyorsa, bunun yerine bize ne olduğunu söyleyin.
Novo

sorunumu anladım, oracle tarih formatımı kabul etmiyor, düşündüğüm her formatı denedim, sadece SYSDATE
Technupe


41

ActiveRecord tarafından oluşturulan SQL'i görüntüleyebilirsiniz:

Sorgu çalıştırılmadan önce:

$this->db->_compile_select(); 

Ve çalıştırıldıktan sonra:

$this->db->last_query(); 

4
$ this-> db -> _ compile_select () kullandığımda; Ölümcül hata alıyorum: Korumalı yönteme çağrı CI_DB_active_record :: _ compile_select () from
Angelin Nadar

Profil oluşturucu şey benim için iyi değil, istediğim sorguyu göstermiyor, sadece SQL'i almak çok karmaşık ... Bu benim için çalışıyor: - echo $ this-> EE-> db -> _ compile_select ();
Laurence Cope

3
CI3'te $this->db->get_compiled_select()bunun yerine kullanın .
Nick Tsai

17

Sorgunuzla ilgili hızlı bir teste ihtiyacınız varsa, bu benim için harika çalışıyor

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

14

Başarısız bir şekilde kullanmayı denedikten sonra _compiled_select()veya nesneyi get_compiled_select()sadece yazdırdım dbve sorguyu orada queriesözellikte görebilirsiniz.

Kendin dene:

var_dump( $this->db );

Yalnızca bir sorgunuz olduğunu biliyorsanız, doğrudan yazdırabilirsiniz:

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

9

get_compiled_selectSorguyu çalıştırmadan önce yazdırabilen yeni bir genel yöntem var. _compile_selectartık korumalı olduğundan kullanılamaz.

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

4
Önemli hata: Tanımlanmamış yönteme çağrı CI_DB_mysql_driver :: get_compiled_select ()
itskawsar


2

Ne last_query()ya get_compiled_select()pedro kodunun ufak bir değişiklik sadece iyi benim için çalışıyor, bu yüzden benim için çalışıyor. Yapınıza dahil etmeyin ->get(), bu -> get () 'den önce olmalıdır.

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

1

Sql wrong.So Ben yeni bir yaklaşım bulduk, çünkü ben Chumillas cevabı @ ve chhameed cevabı @ çalışıyorum, ama değildi iş böyle:

  • Yerleştirin echo $sql; flush(); exit;önce içine return $sql; _compile_selectfonksiyonuDB_active_rec.php

0

Bu satırı yazdırmak istediğiniz sorgunun hemen sonrasına ekleyin.

Misal:

$ sorgu = $ this-> db-> sorgu ('SELECT * FROM table NEREDE koşulu');

// Bu satırı ekleyin.

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

çıkış();

veya

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


0

Bu değerleri VSCode'da ilgili uzantı ve CI v2.x ile izlemek için xdebug kullanıyorum. İfadeyi $this->db->last_query()izleme bölümüne ekliyorum ve launch.json'da xdebugSettingskesilmemiş bir değer elde etmek için bu satırlara benzer düğümler ekliyorum.

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

Ve hata ayıklayıcımı kesme noktası ile çalıştırın ve son olarak sadece ifademi seçin ve sağ tıklayın> değeri kopyala.


-1

Tam olarak aynı sorunu yaşadım ve sonunda çözümü buldum. Sorgum şöyle çalışıyor:

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

Sql komutunu görüntülemek için tek yapmam gereken, sorgumla tamamen aynı içeriğe sahip bir değişken ($ resultstring) oluşturmak ve ardından bunu şu şekilde yankılamaktı:<?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>

İşe yarıyor!


Bu CodeIgniter yolu değil.
mickmackusa

-1

kullanmak get_compiled_select()sorgusu almak için yerine değiştirin


Bu özel durumda önerdiğiniz işlevi nasıl kullanacağınızı göstermeyi öneririm, sadece bundan bahsetmeyi değil. Saygılarımızla
YakovL

-2

Tüm cevapları burada okudum ama alamıyorum

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

çalışmak, bana hata verdi,

Xx satırındaki Welcome'in denetleyicilerinin bağlamından CI_DB_active_record :: _ compile_select () korumalı yönteme çağrı

Bu yüzden protectedaşağıdaki satırdan dosyadan kaldırdım \system\database\DB_active_rec.phpve çalıştı

protected function _compile_select($select_override = FALSE)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.