我运行此代码:
$id = 1;
$email = 'email@gmail.com';
$user = DB::table('users')->where([
['id', '=', $id],
['email', '=', $email]
])->toSql();
dd($user);
但是查询构建器打印是:
select * from `users` where (`id` = ? and `email` = ?)
为什么不打印:
select * from `users` where (`id` = 1 and `email` = email@gmail.com)
答案 0 :(得分:1)
查询构建器插入字符代替值以保护您免受sql注入,然后他自己将根据需要为您设置值,您将获得完成的结果,以及您显示的事实屏幕只是查看查询查询
答案 1 :(得分:0)
这就是 public function get_products($slug = FALSE){
$this->db->select('cv_produucts.title, cv_produucts.id, cv_produucts.body, cv_category.name');
$this->db->join('cv_category','cv_category.id = cv_products.category', 'left');
if(!empty($slug)){
$this->db->where('cv_products.slug',$slug);
}
$this->db->order_by('cv_products.id', 'DESC');
$query= $this->db->get('cv_products');
return $query->result_array();
}
}
方法的工作原理。它只显示准备好的查询但不执行它。
要执行查询,请使用get()
, find()
, first()
或类似方法:
toSql()
答案 2 :(得分:0)
查询生成器插入字符代替值以保护您免受SQL注入。我相信@Дмитрий-Смирнов很好地回答了您的查询。
而不是直接使用原始SQL使用模型,您可以使用以下代码减少代码行:
$id = 1;
$email = 'email@gmail.com';
$user = User::where('id',$id)
->where('email',$email)
->get();
dd($user);