Thinkphp5.0 的实践一
tp5.0默认没有__SELF__,需要定义,
define('__SELF__',strip_tags($_SERVER['REQUEST_URI']));
tp5.0默认没有NOW_TIME,需要定义,
define('NOW_TIME',$_SERVER['REQUEST_TIME']);
tp5的sql使用concat函数报错:
$model = new User(); $where = ['id'=>['<',30]]; $priData = $model->where($where)->order('concat(pri_path,"-",id) asc')->buildSql(); dump($priData);
打印出来的SQL语句是:
SELECT * FROM `user` WHERE `id` < 30 ORDER BY `concat(pri_path`,`"-"`,`id)` ASC
SQL语句中把concat()函数当做字段用反引号引起来了,报如下错误:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'sort`` ASC,`concat(`pri_path``,`'-'`,``id`)` ASC' at line 1。
order()排序无法使用,
解决方法一(使用字段别名)
$model = new User(); $where = ['id'=>['<',30]]; $priData = $model->where($where)->field("id,concat(`pri_path`,'-',`id`) as names")->order('names asc')->buildSql(); dump($priData);
解决方法二(使用原生SQL语句):
$db_config = Config('database'); $db_prefix = $db_config['prefix']; $in_id = '1,2,3,4'; $priData = Db::query("select * from {$db_prefix}user WHERE `id` IN ({$in_id}) order by `sort` asc,CONCAT(`pri_path`,'-',`id`) asc");