Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MYSQL和PHP查询以逗号分隔的字符串返回项目的精确匹配_Php_Mysql_Sql_Csv_Where Clause - Fatal编程技术网

使用MYSQL和PHP查询以逗号分隔的字符串返回项目的精确匹配

使用MYSQL和PHP查询以逗号分隔的字符串返回项目的精确匹配,php,mysql,sql,csv,where-clause,Php,Mysql,Sql,Csv,Where Clause,我正在努力用PHP编写一个MYSQL查询,它可以在逗号分隔的字符串中找到与一个项完全匹配的项。注意,由于各种原因,我无法更改数据模型 Musicians id|artist 1|beatles 2|rolling stones $searchterm = "beatles" 很容易将字符串与以下内容精确匹配: WHERE artist = '$searchterm' 我怎样才能确定以下各项中的精确匹配 Musicians id|artist 1|beatles,the beatles,th

我正在努力用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
感谢您的建议

您可以使用:

重要提示:

  • 不要将变量连接到查询字符串中,因为这会使代码效率低下,并使您暴露于SQL注入;相反,请使用参数化查询。相关阅读:

  • 在数据库列中存储分隔列表是一种糟糕的做法;它基本上违背了关系数据库的目的,使简单的事情变得不必要的复杂(正如您开始看到的)。推荐相关阅读:


Thx我意识到它在MYSQL这样的数据库中是次优的。但是,我无法更改数据模型,必须处理其中的内容。我遇到了一个sql语法错误。在集合中的何处查找(:“$searchterm”,艺术家)…是否应该有所不同?还尝试了在没有“”的情况下使用相同错误的$searchterm OK。不应该有:语法应该是FIND_IN_SET(“$needle”,haystack)@zztop:yes。我给出的语法使用了一个查询参数(请参阅第一个“重要注意事项”)。
WHERE FIND_IN_SET(:searchterm, artist)