gpt4 book ai didi

php - Laravel 5.1 Eloquent 转义字符串参数(havraw)

转载 作者:可可西里 更新时间:2023-11-01 13:27:50 26 4
gpt4 key购买 nike

我收到一个字符串参数,我想将 havingRaw 用于:

我收到的字符串:

$searchString = Input::get('q');//example:party beach

我在不同的问题中发现我应该使用它来防止 sql 注入(inject):

$searchStringEsc = DB::connection()->getPdo()->quote($searchString);

我遇到的问题是,当我使用 havingRaw 插入我的查询时,由于我的字符串现在已转义 `party beach`,它返回 null,但是当我插入未转义的字符串时,它工作正常。

->havingRaw('search rlike replace("'.$searchStringEsc.'", " ", "|")')

还有其他方法可以转义原始参数吗?谢谢

编辑——完整查询(我正在做一个搜索查询,用户可以输入城市名称、机构名称、任何标记到机构的标签等...)

            $results = DB::table('events')
->leftJoin('event_tag', 'events.id', '=', 'event_tag.event_id')
->join('tags', 'tags.id', '=', 'event_tag.tag_id')
->join('establishments', 'establishments.id', '=', 'events.establishment_id')
->join('cities', 'establishments.city_id', '=', 'cities.id')
->leftJoin('artist_event', 'events.id', '=', 'artist_event.event_id')
->join('artists', 'artist_event.artist_id', '=', 'artists.id')
->leftJoin('event_music', 'events.id', '=', 'event_music.event_id')
->join('musics', 'musics.id', '=', 'event_music.music_id')
->select('events.id as evId', 'events.slug as evSlug', 'events.name as evName',
'events.cover_path as estPath','establishments.establishment_type_id as estType',
'establishments.name as estName', 'events.start_date as evStart', 'events.end_date as evEnd',
'cities.name as ciName',
DB::raw('CONCAT_WS(",",
GROUP_CONCAT(distinct tags.name),
GROUP_CONCAT(distinct artists.name),
GROUP_CONCAT(distinct cities.name),
GROUP_CONCAT(distinct events.name),
GROUP_CONCAT(distinct musics.name)
) as search'))
->where('events.end_date','>=', DB::raw('NOW()'))
->where('establishments.is_active','=',1)
->groupBy('events.id')
->havingRaw('search rlike replace("'.$searchString.'", " ", "|")')
->orderBy('events.total_visited', 'desc')
->take(5)->get();

如果我将它保留为 $searchString(未转义的字符串),它可以正常工作。如果我将它更改为 $searchStringEsc(转义字符串),它返回 null

最佳答案

您可以简单地使用查询绑定(bind),所以替换

 ->havingRaw('search rlike replace("'.$searchString.'", " ", "|")')

->havingRaw('search rlike replace(?, " ", "|")', [$searchString])

它可以处理您所有的转义需求(whereRaw 也可以做到)。 ? 只是意味着您在那里有一个绑定(bind)参数(即 $searchString)。

关于php - Laravel 5.1 Eloquent 转义字符串参数(havraw),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31690949/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com