QQ咨询 官方微信

添加微信好友

官方小程序

百度小程序

微信小程序

头条小程序

关于我们

Thinkphp

tp下order和orderRaw用法和区别

 shitouadmin  2026-01-08 17:33:31
一、基础用法与定义
1. order 方法(安全的排序方法)
order 是 TP5 封装的安全排序方法,主要用于常规的字段排序,会自动对字段名进行转义处理,防止 SQL 注入,是日常开发中最常用的排序方式。
基本语法:
  1. // 单个字段排序 
  2. Db::name('user')->order('id''desc')->select(); 
  3.  
  4. // 多个字段排序(数组形式) 
  5. Db::name('user')->order(['id' => 'desc''create_time' => 'asc'])->select(); 
  6.  
  7. // 链式调用多个order 
  8. Db::name('user')->order('id desc')->order('create_time asc')->select(); 
执行效果:
以上代码最终生成的 SQL 类似:
  1. SELECT * FROM `user` ORDER BY `id` DESC, `create_time` ASC 
可以看到,字段名被自动加上了反引号(`),避免了字段名与 SQL 关键字冲突的问题。
2. orderRaw 方法(原生排序方法)
orderRaw 用于执行原生的排序 SQL 片段,不会对传入的内容做任何转义处理,适合处理复杂的排序逻辑(如包含函数、表达式的排序)。
基本语法:
  1. // 带函数的排序(按字段长度排序) 
  2. Db::name('user')->orderRaw('LENGTH(nickname) DESC')->select(); 
  3.  
  4. // 带条件的排序(按自定义规则排序) 
  5. Db::name('user')->orderRaw("FIELD(status, 2, 1, 0) DESC, create_time ASC")->select(); 
  6.  
  7. // 结合参数绑定(推荐,防止注入) 
  8. Db::name('user')->orderRaw('FIELD(id, ?) DESC', [10, 20, 30])->select(); 
执行效果:
以上代码生成的 SQL 类似:
  1. -- 按昵称长度排序 
  2. SELECT * FROM `user` ORDER BY LENGTH(nickname) DESC; 
  1. -- 按status自定义顺序排序 
  2. SELECT * FROM `user` ORDER BY FIELD(status, 2, 1, 0) DESC, create_time ASC; 
  3. 传入的原生 SQL 片段会直接拼接,无任何转义。 


¥ 打赏
×
如果您觉得文章帮助了您就打赏一下吧
非常感谢你的打赏,我们将继续分享更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

本文《tp下order和orderRaw用法和区别》发布于石头博客文章,作者:shitouadmin,如若转载,请注明出处:https://www.pweb123.com/kuangjia/thinkphp/1230.html,否则禁止转载,谢谢配合!

文章点评

我来说两句 已有0条评论
点击图片更换

添加微信好友

添加微信好友

微信小程序

百度小程序