关于TH5.1 Mysql驱动不支持的数据表达式中有中文的问题

浏览:318 发布日期:2021/01/11 分类:技术分享 关键字: 不支持的数据表达式 中文字段
今天在测试一个程序时出现了这个报错
经过一番查询后发现,框架本身的问题
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);
}

完美解决
最佳答案
评论( 相关
后面还有条评论,点击查看>>