php - SQL 使用 replace() 选择 LIKE 结果和精确结果

标签 php mysql sql-server

抱歉,如果标题描述性不强,我真的不知道如何简短地表达这一点。在我的网站上,我有一个数据库表,里面全是视频游戏和电子竞技团队。当我在 URL 中显示团队名称时,我会从中删除所有空格。出于这个原因,我需要在搜索时接受名称的无空格版本,以防有人尝试输入他们在 URL 中找到的名称。

球队名称示例:Los Santos Kings

URL 示例:mysite.com/teams/LosSantosKings

示例搜索查询 #1:“Los San”(不带引号)

示例搜索结果 #1:Los Santos Kings

示例搜索查询 #2:“LosSan”(不带引号)

示例搜索结果 #1:空 - 返回 0 行

如果您搜索“Los San”,则会返回团队的数据库行。但是,如果您搜索“LosSan”,则不会。这种使用 SQL 的 replace() 函数的方法在我测试它的精确匹配时工作正常,但是当设置在 LIKE 查询旁边时,它在后一个实例中不起作用。

这是我的查询:

$sql = "SELECT * FROM teams WHERE name LIKE '%{$search}%' OR replace(name, ' ', '') LIKE '%{".str_replace(' ', '', $search)."}%' ORDER BY name ASC"

这是一个语法错误,还是我需要以另一种方式解决这个问题,可能需要对团队名称进行 2 次单独的查询/检查?

最佳答案

您的 LIKE 不是问题所在。这是大括号。当您编写 {$search} 时,这是因为您已将 PHP 变量注入(inject)到字符串中。但是对于 str_replace,您无论如何都会破坏字符串,因此您不应该将其括起来。

这是你的新行:

$sql = "SELECT * FROM teams WHERE name LIKE '%{$search}%' OR replace(name, ' ', '') LIKE '%".str_replace(' ', '', $search)."%' ORDER BY name ASC"

关于php - SQL 使用 replace() 选择 LIKE 结果和精确结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32276841/

相关文章:

python - 如何使用 PyMySQL 将 Pandas Dataframe 插入 MySql

mysql - 合并 2 个 SELECT 语句并填充空白

php - 导出 MySQL 输出文件 csv 时如何在单个查询中同时转义反斜杠和双引号

PHP MusicBrainz 获得第一个发布日期

php - 如何防止使用 foreach 插入多行的 SQL 注入(inject)?

sql - 显示列中具有不匹配值的记录 SQL Server

sql - 在 Select 语句中使用存储过程的结果

c# - 将 CSV 文件上传到 SQL 服务器

php - Cronjob 相对路径不执行文件

PHP 数据库删除函数只适用于数据库的第一行?