Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
Php 搜索mysql数据库_Php_Mysql_Search - Fatal编程技术网

Php 搜索mysql数据库

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'

目前我有一个音乐数据库,我在mysql中有db'd,现在我正在为它编写一个php前端,它将在一个表中列出所有内容,它是有效的,但是如果我搜索“披头士”,它会给我453个结果(正确),但是如果我只搜索“披头士”,它会得到0行结果,我该如何让它能够搜索这样的东西呢

这是我目前的路线:

$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%';