首先查询语句是查询全部字段:
<?php
namespace app\index\controller;
use think\Db;
class Demo
{
public function conn()
{
$res = Db::table('student')
->field('')
->where('id',2)
->find();
dump(is_null($res)?'没有找到':$res);
// return Db::table('student')->where('id',1)->value('name');
}
}
输出结果是这样
当给字段设置别名时(1)
$res = Db::table('student')
->field(['id'=>'编号','name'=>'姓名'])
->where('id',2)
->find();
打印结果是
虽然我们可以换一种写法,例如(2)
$res = Db::table('student')
->field(['id as 编号,name as 姓名'])
->where('id',2)
->find();
可以实现效果
但是我们也要知道问题出在哪里
我们打开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);
}
这样就可以使用第一种那样的写法了。