php 字段不支持中文,tp5.1中字段别名是汉字,提示错误:不支持的数据表达式

tp5.1中字段别名是汉字,提示错误:Exception in Mysql.php line 149 不支持的数据表达式:编号

代码如下:

$rs = Db::table('users')

->field(['userId'=>'编号','loginName'=>'用户名'])

->where('userId',1)

->find();

如果直接执行sql语句,是可以用汉字别名的,如:

$sql = 'select userId as 编号,loginName as 用户名 from users where userId=1';

$rs2 = Db::query($sql);

怎么解决呢?

根据提示,我们打开Mysql.php 149行,路径:根目录\thinkphp\library\think\db\builder\Mysql.php

if ($strict && !preg_match('/^[\w\.\*]+$/', $key)) {

throw new Exception('not support data:' . $key);

}

原来是正则验证导致汉字出错,\w匹配字母或数字或下划线,等价于[A-Za-z0-9_],再加上.和*

我们可以在正则中加上汉字,就可以应用汉字别名了,修改如下:

if ($strict && !preg_match('/^[\w\.\*\x7f-\xff]+$/', $key)) {

throw new Exception('not support data:' . $key);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值