查询构建器不显示变量?

时间:2018-02-25 15:25:24

标签: mysql laravel query-builder

我运行此代码:

$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)

3 个答案:

答案 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);