php - 使用 MYSQL 和 PHP 查询以逗号分隔的字符串中的项目返回完全匹配
问题描述
我正在努力用 PHP 编写一个 MYSQL 查询,该查询可以找到与逗号分隔字符串中的一项完全匹配的内容。请注意,由于各种原因,我无法更改数据模型
Musicians
id|artist
1|beatles
2|rolling stones
$searchterm = "beatles"
很容易将字符串与以下内容完全匹配:
WHERE artist = '$searchterm'
我如何确定以下内容的完全匹配
Musicians
id|artist
1|beatles,the beatles,the fab four,fab four,fab for
2|rolling stones,the rolling stones,stones,the stones
$searchterm = "fab four"
//something like the following although it does not work
WHERE $searchterm IN artist
感谢您的任何建议
解决方案
你可以使用find_in_set()
:
WHERE FIND_IN_SET(:searchterm, artist)
重要笔记:
不要将变量连接到查询字符串中,因为这会使您的代码效率低下并使您暴露于 SQL 注入;相反,请使用参数化查询。相关阅读:如何防止 PHP 中的 SQL 注入?
在数据库列中存储分隔列表是不好的做法;它基本上违背了关系数据库的目的,并使简单的事情变得不必要地复杂(正如您开始看到的那样)。推荐相关阅读:在数据库列中存储分隔列表真的那么糟糕吗?
推荐阅读
- vba - 词添加在缓存中,无法删除
- python - 使用 Scrapy [Python] 抓取相对 URL
- r - 优化 dplyr mutate 函数中的计算
- python - 开箱雅虎财经历史图片
- c - 即使正在使用所有函数,库文件也比可执行文件大十倍
- python - 如何使用 keras 将标量值添加到自动编码器中的潜在变量中
- json - 在.NET中反序列化json时如何忽略丢失的节点
- java - 将类作为参数传递给方法,然后调用静态方法
- python-3.x - 错误:从 tcl 运行 python 脚本时回溯(最后一次调用)
- jquery - Django Paginator - 所有页面对象操作