thinkphp5中使用@数据库变量的问题

时间:2022-09-24 16:42:05
Db::execute(" set @likes='%管理%'; ");
$res=Db::table("erp_build_form")
->where('title','like',"@likes")
->order('id','desc')
->select(false);
//->select();
print_r($res);


这样生成的sql是 SELECT * FROM erp_build_form WHERE title LIKE '@likes' ORDER BY id desc
我想要的@likes 不要引号,要引号就当成变量查询了。。。。

4 个解决方案

#1


->where('title','like',"@likes")
为什么要这样写呢?直接
 ->where('title','like',"%管理%")
不是很简单吗

#2


引用 1 楼 xuzuning 的回复:
->where('title','like',"@likes")
为什么要这样写呢?直接
 ->where('title','like',"%管理%")
不是很简单吗



这个说起来就比较复杂了,因为我们的系统中,部分是有默认值的,比如默认用户的id和默认的用户部门的id。所以,我们想实现执行下sql的set命令(十几个变量),这样 以后的sql就能自动寻找已经定义好的变量直接执行了。有点类似于tp的bind。但是tp的bind有个bug,就是在插入的时候,bind的参数必须和sql中的参数一致。我们做到一致的话比较困难,需要经过一部转换。

不知道有没有说明白。。。

#3


但是用户变量只在当前连接中有效,所以并不存在预置的事情

#4


为什么不用存储过程? 
http://www.allmai.net/?ctrl=detail&method=note&id=12&typename=note

#1


->where('title','like',"@likes")
为什么要这样写呢?直接
 ->where('title','like',"%管理%")
不是很简单吗

#2


引用 1 楼 xuzuning 的回复:
->where('title','like',"@likes")
为什么要这样写呢?直接
 ->where('title','like',"%管理%")
不是很简单吗



这个说起来就比较复杂了,因为我们的系统中,部分是有默认值的,比如默认用户的id和默认的用户部门的id。所以,我们想实现执行下sql的set命令(十几个变量),这样 以后的sql就能自动寻找已经定义好的变量直接执行了。有点类似于tp的bind。但是tp的bind有个bug,就是在插入的时候,bind的参数必须和sql中的参数一致。我们做到一致的话比较困难,需要经过一部转换。

不知道有没有说明白。。。

#3


但是用户变量只在当前连接中有效,所以并不存在预置的事情

#4


为什么不用存储过程? 
http://www.allmai.net/?ctrl=detail&method=note&id=12&typename=note