Cách in câu lệnh SQL trong mô hình codeigniter


107

Tôi có một câu lệnh sql trong mô hình của mình,

Sau đó tôi nói

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

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

Truy vấn của tôi luôn không thành công, làm cách nào để php in câu lệnh sql chính xác được gửi đến cơ sở dữ liệu của tôi? Và hiển thị điều đó trên chế độ xem php của tôi, trang

Câu trả lời:


124

Để hiển thị chuỗi truy vấn:

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

Để hiển thị kết quả truy vấn:

print_r($query);

Lớp Hồ sơ sẽ hiển thị kết quả điểm chuẩn, truy vấn bạn đã chạy và dữ liệu $ _POST ở cuối trang của bạn. Để kích hoạt trình biên dịch, hãy đặt dòng sau vào bất kỳ đâu trong các phương thức Bộ điều khiển của bạn:

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

Hướng dẫn sử dụng hồ sơ: https://www.codeigniter.com/user_guide/general/profiling.html


7
khi tôi thực hiện print_r ($ query); không có gì in ra
Technupe

1
Sử dụng hồ sơ CI được tích hợp sẵn, thông tin thêm tại đây
Novo

2
tất cả tôi muốn làm là in ra báo cáo sql như truyền cho các cơ sở dữ liệu, sory nhưng các hồ sơ không được giúp đỡ nhiều không
Technupe

Truy cập liên kết hướng dẫn sử dụng tôi đã đăng, nếu nó không hoạt động, hãy cho chúng tôi biết điều gì sẽ xảy ra thay thế.
Novo

Tôi cũng đã tìm ra vấn đề của mình, oracle không chấp nhận định dạng ngày của tôi, tôi đã thử mọi định dạng mà tôi nghĩ, nó sẽ chỉ chấp nhận SYSDATE
Technupe


41

Bạn có thể hiển thị SQL được tạo bởi ActiveRecord:

Trước khi truy vấn chạy:

$this->db->_compile_select(); 

Và sau khi nó chạy:

$this->db->last_query(); 

4
khi tôi sử dụng $ this-> db -> _ compile_select (); tôi gặp lỗi nghiêm trọng: Cuộc gọi đến phương thức được bảo vệ CI_DB_active_record :: _ compile_select () từ
Angelin Nadar 19/12/12

Điều này không tốt cho tôi, không hiển thị truy vấn tôi muốn, quá phức tạp để chỉ lấy SQL ... Điều này phù hợp với tôi: - echo $ this-> EE-> db -> _ compile_select ();
Laurence Cope

3
Trong CI3, Sử dụng $this->db->get_compiled_select()thay thế.
Nick Tsai,

17

nếu bạn cần kiểm tra nhanh truy vấn của mình, điều này rất phù hợp với tôi

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

14

Sau khi thử sử dụng mà không thành công _compiled_select()hoặc get_compiled_select()tôi vừa in dbđối tượng và bạn có thể thấy truy vấn ở đó trong thuộc queriestính.

Hãy tự mình thử:

var_dump( $this->db );

Nếu bạn biết mình chỉ có một truy vấn, bạn có thể in trực tiếp:

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

9

Có một phương thức công khai mới get_compiled_selectcó thể in truy vấn trước khi chạy nó. _compile_selectbây giờ được bảo vệ do đó không thể được sử dụng.

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

4
Fatal error: Call to undefined phương pháp CI_DB_mysql_driver :: get_compiled_select ()
itskawsar

9

Bạn chỉ có thể sử dụng điều này ở cuối ..

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

2

Không last_query()hoặc không hiệu get_compiled_select()quả với tôi, vì vậy một chút thay đổi mã của pedro chỉ phù hợp với tôi. Không bao gồm ->get()trong bản dựng của bạn, điều này phải nằm trước -> get ()

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

1

Tôi thử câu trả lời của @ Chumillas và câu trả lời của @ chhameed, nhưng nó không hoạt động, vì sql sai. Vì vậy, tôi đã tìm ra cách tiếp cận mới, như thế này:

  • Chèn echo $sql; flush(); exit;vào trước return $sql; _compile_selectchức năng củaDB_active_rec.php

0

Thêm dòng này ngay sau truy vấn bạn muốn in.

Thí dụ:

$ query = $ this-> db-> query ('SELECT * FROM table WHERE điều kiện');

// Thêm dòng này.

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

lối ra();

hoặc là

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


0

Tôi đang sử dụng xdebug để xem các giá trị này trong VSCode với phần mở rộng tương ứng và CI v2.x. Tôi thêm phần thám hiểm $this->db->last_query()trong phần xem và tôi thêm xdebugSettingsnút như những dòng này để nhận giá trị không bị cắt ngắn trong launcher.json.

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

Và chạy trình gỡ lỗi của tôi với điểm ngắt và cuối cùng chỉ cần chọn giải pháp của tôi và nhấp chuột phải> sao chép giá trị.


-1

Tôi đã gặp chính xác vấn đề tương tự và cuối cùng đã tìm ra giải pháp. Truy vấn của tôi chạy như sau:

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

Để hiển thị lệnh sql, tất cả những gì tôi phải làm là tạo một biến ($ resultstring) với nội dung giống hệt như truy vấn của tôi và sau đó lặp lại nó, như sau:<?php echo $resultstring = 'SELECT * FROM clients WHERE ' . $sql_where . ' AND ' . $sql_where2 . ' ORDER BY acconame ASC '; ?>

Nó hoạt động!


Đây không phải là cách CodeIgniter.
mickmackusa

-1

sử dụng get_compiled_select()để truy xuất truy vấn thay vì thay thế nó


Tôi đề nghị chỉ ra cách sử dụng chức năng bạn đề xuất trong trường hợp cụ thể này, không chỉ đề cập đến nó. Trân trọng
YakovL

-2

Tôi đọc tất cả các câu trả lời ở đây, nhưng không thể nhận được

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

để làm việc, nó đã cho tôi lỗi như,

Gọi đến phương thức được bảo vệ CI_DB_active_record :: _ compile_select () từ ngữ cảnh 'Chào mừng' trong bộ điều khiển trên dòng xx

Vì vậy, tôi đã xóa protectedkhỏi dòng dưới đây khỏi tệp \system\database\DB_active_rec.phpvà nó hoạt động

protected function _compile_select($select_override = FALSE)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.