Laravel数据库查询中对 like 的值进行转义

龙行    PHP    2020-8-20    550    0评论

在laravel开发中,如果我们用到like模糊搜索$where[] = ['title', 'like', '%'.$data['title'].'%'];

上面这种在laravel中会报数据错误。

参考各种实例,可以这样做function like_str($str)

{

$like_escape_char = '!';

return str_replace([$like_escape_char, '%', '_'], [

$like_escape_char.$like_escape_char,

$like_escape_char.'%',

$like_escape_char.'_',

], $str);

}

先用函数对keyword进行处理避免%和_把所有数据查出来

然后如下使用$query->where('title','like' , "%".like_str($keyword)."%");

或者还可以使用trait<?php

namespace App\Models\Traits;

trait LikeScope

{

/**

* @param   \Illuminate\Database\Eloquent\Builder $query

* @param     $column

* @param     $value

* @param     $side

* @param     $isNotLike

* @param     $isAnd

* @return    \Illuminate\Database\Eloquent\Builder

*/

public function scopeLike($query, $column, $value, $side = 'both',

$isNotLike = false, $isAnd = true)

{

$operator = $isNotLike ? 'not like' : 'like';

$escape_like_str = function ($str) {

$like_escape_char = '!';

return str_replace([$like_escape_char, '%', '_'], [

$like_escape_char.$like_escape_char,

$like_escape_char.'%',

$like_escape_char.'_',

], $str);

};

switch ($side) {

case 'none':

$value = $escape_like_str($value);

break;

case 'before':

case 'left':

$value = "%{$escape_like_str($value)}";

break;

case 'after':

case 'right':

$value = "{$escape_like_str($value)}%";

break;

case 'both':

case 'all':

default:

$value = "%{$escape_like_str($value)}%";

break;

}

return $isAnd ? $query->where($column, $operator, $value) :

$query->orWhere($column, $operator, $value);

}

public function scopeOrLike($query, $column, $value, $side = 'both',

$isNotLike = false)

{

return $query->like($column, $value, $side, $isNotLike, false);

}

public function scopeNotLike($query, $column, $value, $side = 'both', $isAnd = true)

{

return $query->like($column, $value, $side, true, $isAnd);

}

public function scopeOrNotLike($query, $column, $value, $side = 'both')

{

return $query->like($column, $value, $side, true, false);

}

}

如下使用<?php

use App\Models\Traits\LikeScope;

use Illuminate\Database\Eloquent\Model;

class MyModel extends Model

{

use LikeScope;

public function scopeSearch($query, $keyword)

{

return $query->like('title', $keyword);

}

}

评论一下

赞助站长

赞助站长X

版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。

本文网址:https://www.liaotaoo.cn/375.html

laravel mysql like_Laravel数据库查询中对 like 的值进行转义相关推荐

  1. python从云端数据库获取数据失败_使用%s的Python MySQL Connector数据库查询失败

    使用%s的Python MySQL Connector数据库查询失败 我有一个基本程序,应该查询包含用户信息的数据库.我正在尝试为特定用户选择信息并将其打印到控制台. 这是我的代码:import my ...

  2. MySQL开发技巧 第二禅(子查询中匹配两个值、解决同属性多值过滤的问题、计算累进税的问题)

    一.如何在子查询中匹配两个值 mysql子查询的使用场景及其好处 1.什么是子查询?             当一个查询是另一个查询的条件时,称之为子查询(可以在curd中) 2.常见的子查询使用场景 ...

  3. 数据库查询中的in语句

    数据库查询中的in语句 在数据库中也有运算符,比如<.>.=.之类的,还有一些or.and之类的,下面我们来学习关于in语句的方法,in在数据库中到底起怎样的作用? 如上图,我通过wher ...

  4. 数据库查询新增一列默认值

    数据库查询新增一列默认值 场景:我们在做数据库查询时候,可能会遇到需要需要返回一列默认值. 假如我们在查询一张user表时,需要返回一列固定的比如机构号org,我们可以通过sql语句实现. selec ...

  5. MySQL数据库查询中的特殊命令

    第一:   MySQL的安装 下载MySQL软件,修改安装路径之后 安装数据库MySQL5.7.18 第一步:数据库MySQL5.7.18可以在官网上下载对应的版本,下载地址:http://www.f ...

  6. php 查看 实例 的方法,php – 从Laravel 5.1中的通用数据库查询中获取Eloquent模型的实例...

    我有不同关系的模型.假设我的Entry模型属于供应商,所以通常我的模型文件中有一个supplier()方法. 到目前为止一切都那么好,当我有一些像Entry :: find(1) – >供应商这 ...

  7. laravel mysql 锁表_Laravel中MySQL的乐观锁与悲观锁

    MySQL/InnoDB的加锁,是一个老生常谈的话题.在数据库高并发请求下,如何兼顾数据完整性与用户体验的敏捷性是一代又一代程序员一直在思考的问题. 乐观锁 乐观锁之所以叫乐观,是因为这个模式不会对数 ...

  8. MySQL在like查询中是否使用到索引

    mysql在使用like查询中,能不能用到索引?在什么地方使用索引呢? 在使用like的时候,如果使用'%%',会不会用到索引呢? EXPLAIN SELECT * FROM `user` WHERE ...

  9. yii mysql 操作数据库_YII2中操作数据库的方式

    一.以createCommand方式: // YII2中通过createCommand来处理数据库 // 查询多条记录 // {{%user}} 表示如果设置了表前缀,YII会自动帮你替换 $data ...

最新文章

  1. 如何重新创建mysql数据库_重新创建数据库与数据表《 MySQL 基础 》
  2. 第七节: EF的三种事务的应用场景和各自注意的问题(SaveChanges、DBContextTransaction、TransactionScope)
  3. 工作中99%能用到的git命令
  4. 【渝粤教育】国家开放大学2018年春季 0133-22T大学物理 参考试题
  5. IE8下window.open出现的bug
  6. 国二python考试时间_计算机国二报名每年在几月份
  7. IDEA2019安装教程
  8. 获取抖音无水印视频地址
  9. BI数据分析师究竟是做什么的?
  10. Meta元宇宙副总裁离职了...『Go语言圣经』终于汉化啦;德云社失业警告!AI要说相声了;一键就能AI绘图的网站;前沿论文 | ShowMeAI资讯日报
  11. LAMMPS甲烷全原子(CH4)模型的分子模板问题
  12. 《嵌入式系统设计师》笔记之一——嵌入式系统基础知识
  13. android lunch 选择写入脚本,Android源码编译之 lunch命令分析及user和userdebug编译选项区别...
  14. Js中var,let,const的区别
  15. 一分钟详解「手眼标定」基本原理
  16. 【luogu P7473】重力球
  17. 良心安利通用模板素材网站
  18. 对圆柱面的曲面积分_计算对面积的曲面积分zds 圆柱面x^2+y^2=1介于平面z=0 和z=3之间的部分...
  19. OpenWrt下SSR与XWare迅雷远程冲突问题
  20. python 角度判断_python的turtle也能仿抖音网红文字时钟的代码及分析

热门文章

  1. redux常见问题答疑
  2. OpenCV 3.1.0中的Mat对象使用
  3. 预定义的类型“Microsoft.CSharp.RuntimeBinder.Binder”未定义或未导入
  4. 转 Android自动测试之monkeyrunner工具(二)
  5. Nginx出现“413 Request Entity Too Large”错误解决方法
  6. 怎样使用dhcp自动分配IP地址
  7. oracle事务数统计,oracle函数与事务
  8. poi解析excel读取日期为数字的问题
  9. python多态的概念_Python 多态
  10. oracle10g資料庫調效,資料庫 | 簡睿隨筆 | 學習過程的紀錄與備忘