Php 搜索mysql数据库
目前我有一个音乐数据库,我在mysql中有db'd,现在我正在为它编写一个php前端,它将在一个表中列出所有内容,它是有效的,但是如果我搜索“披头士”,它会给我453个结果(正确),但是如果我只搜索“披头士”,它会得到0行结果,我该如何让它能够搜索这样的东西呢 这是我目前的路线:Php 搜索mysql数据库,php,mysql,search,Php,Mysql,Search,目前我有一个音乐数据库,我在mysql中有db'd,现在我正在为它编写一个php前端,它将在一个表中列出所有内容,它是有效的,但是如果我搜索“披头士”,它会给我453个结果(正确),但是如果我只搜索“披头士”,它会得到0行结果,我该如何让它能够搜索这样的东西呢 这是我目前的路线: $query2 = "SELECT * From `songs` WHERE `Artist` like '".$_REQUEST['q']."' OR `Album` like '".$_REQUEST['q'
$query2 = "SELECT * From `songs` WHERE `Artist` like '".$_REQUEST['q']."'
OR `Album` like '".$_REQUEST['q']."' OR `Genre` like '".$_REQUEST['q']."'
OR `Title` like '".$_REQUEST['q']."';";
编辑按重新格式化的查询
在搜索词前后的引号中抛出一个
%
:
WHERE Artist like '%".$_REQUEST['q']."%'
<>这将搜索[甲壳虫乐队] [任何事物] 你可能想考虑解析用户的输入并清理它。不要使用“the”之类的词,只需在查询中使用“beatles”之类的重要词即可。您需要防止SQL注入。如果有人进来怎么办:
”;删除数据库音乐--代码>
或者类似的东西?类似的查询允许您使用SQL通配符(%
和
)。否则,它的行为就像您使用常规的“等于”比较:
SELECT .... WHERE somefield LIKE 'beatles';
SELECT .... WHERE somefield='beatles';
行为完全相同,而
SELECT .... WHERE somefield LIKE 'beatles%';
查找somefield以“披头士”开头的任何唱片,以及
SELECT .... WHERE somefield='beatles%';
将只找到包含文字字符串“beatles%”的记录(请注意,%未被视为通配符)。请记住使用mysql\u real\u escape\u字符串来清理用户输入:非常感谢,这似乎有助于解决这种情况,我可能需要进行更多的解析,我忘了在上面添加它,我通过执行$\u REQUEST['q']=mysql\u real\u escape\u string($\u REQUEST['q'])来转义信息;显然,在每个搜索字符串周围都加上%。或者,在您的示例中,do$_REQUEST['q']='%'。mysql_real_escape_字符串($_请求['q'])。%;还可以将唱片存储为“披头士乐队”,只需进行搜索,如“披头士%”
。
SELECT .... WHERE somefield='beatles%';