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.