我正在使用一个库,需要将sql查询作为字符串提供给它的工作。
我正在使用CodeIgniter和他们的数据库类的活动记录实现。
我知道我可以像这样回应SQL语句......但我只想生成这个查询,而不是执行它。
echo $this->db->last_query();
任何帮助实现这一目标都会很棒!
答案 0 :(得分:6)
有一点hack你可以去system / DB_active_rec.php并删除protected keyword form _compile_select方法,现在
return $this->db->_compile_select();
也可以使用$this->db->from('table');
而不是get()
因为get会执行查询
这是一个例子
function index(){
$this->db->select('blah blah');
$this->db->from('table');
$string = $this->db->_compile_select();
return $string;
}
答案 1 :(得分:5)
取决于它的查询类型。插入和更新有方法可以让你这样做。
$this->db->set('foo', $bar);
$this->db->update_string('table'); // UPDATE table SET foo = "bar"
答案 2 :(得分:3)
您正在使用的last_query()函数返回查询字符串,它不会执行它。尝试将函数return赋值给变量以在库中使用。
$str = $this->db->last_query();
答案 3 :(得分:2)
我不知道这是否是一种安全的做法,但db对象将其查询存储在queries属性中,因此您可以通过以下方式获取它:
$this->db->queries
返回一组查询。
答案 4 :(得分:0)
从Codeigniter 3开始,您可以使用get_compiled_select()
要在CI3之前使用它,请参阅Is there a function like _compile_select or get_compiled_select()?
答案 5 :(得分:0)
Codeignitier为此提供了一些公共方法。
$sql = $this->db->get_compiled_select()
$sql = $this->db->get_compiled_insert()
$sql = $this->db->get_compiled_update()
$sql = $this->db->get_compiled_delete()