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

[复制链接]
查看11 | 回复4 | 2021-1-27 07:03:58 | 显示全部楼层 |阅读模式
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*FROMerp_build_formWHEREtitleLIKE'@likes'ORDERBYiddesc
我想要的@likes不要引号,要引号就当成变量查询了。。。。
分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:03:58 | 显示全部楼层
->where('title','like',"@likes")
为什么要这样写呢?直接
->where('title','like',"%管理%")
不是很简单吗
回复

使用道具 举报

千问 | 2021-1-27 07:03:58 | 显示全部楼层
引用1楼xuzuning的回复:->where('title','like',"@likes")
为什么要这样写呢?直接
->where('title','like',"%管理%")
不是很简单吗


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

使用道具 举报

千问 | 2021-1-27 07:03:58 | 显示全部楼层
但是用户变量只在当前连接中有效,所以并不存在预置的事情
回复

使用道具 举报

千问 | 2021-1-27 07:03:58 | 显示全部楼层
为什么不用存储过程?
http://www.allmai.net/?ctrl=detail&method=note&id=12&typename=note
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行