我的代码就是这个,
$query = "SELECT * FROM `cars` WHERE (color LIKE '%". $key ."%' OR name LIKE '%". $key ."%') AND enabled = 'yes' ORDER BY `ID`";
数据库就像这样
ID color name enabled
---- ------ -------- ---------
1 red red car yes
2 blue blue car yes
3 brown brown car yes
[R
当我用“红色”键搜索时,它会返回第一个字段(ID 1),但是如果我用“红色汽车”搜索,它将不返回任何内容。
我如何搜索两个字段?
感谢
编辑:我固定括号,但仍然无法获得超过1个单词键的结果。
试着没有运气
$query = "SELECT * FROM `cars` WHERE (MATCH (color,name) AGAINST ('$key' IN BOOLEAN MODE)) AND enabled = 'yes' ORDER BY `ID`";
编辑2:彼得是对的。查询中没有问题。奇怪的是
我用这个
$key = $_GET['key'];
如果$ _GET ['key']超过1个字,则$ key因某种原因返回空。
答案 0 :(得分:2)
我无法复制您的错误。这是我采取的步骤
新表
CREATE TABLE `cars` (
`ID` int(10) unsigned NOT NULL auto_increment,
`color` varchar(45) NOT NULL,
`name` varchar(45) NOT NULL,
`enabled` varchar(45) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
然后添加值
INSERT INTO `cars` (`ID`, `color`, `name`, `enabled`) VALUES
(1,'red','red car','yes')
, (2,'blue','blue car','yes')
, (3,'brown','brown car','yes');
然后测试查询
mysql> SELECT * FROM `cars`
-> WHERE (color LIKE '%red%' OR name LIKE '%red%')
-> AND enabled = 'yes'
-> ORDER BY `ID`;
+----+-------+---------+---------+
| ID | color | name | enabled |
+----+-------+---------+---------+
| 1 | red | red car | yes |
+----+-------+---------+---------+
1 row in set (0.00 sec)
mysql> SELECT * FROM `cars`
-> WHERE (color LIKE '%red car%' OR name LIKE '%red car%')
-> AND enabled = 'yes'
-> ORDER BY `ID`;
+----+-------+---------+---------+
| ID | color | name | enabled |
+----+-------+---------+---------+
| 1 | red | red car | yes |
+----+-------+---------+---------+
1 row in set (0.00 sec)
也许在其他地方寻找你的错误
答案 1 :(得分:2)
“编辑2:彼得是对的。没有 在查询中有问题。奇怪的是我用了 此$ key = $ _GET ['key'];
如果$ _GET ['key']超过1个字, 由于某种原因,$ key返回为空。“
你如何传递$ _GET?您使用的是表单还是只是输入变量
blah.php?key = test +和
不是
blah.php?key = test和
答案 2 :(得分:1)
您可以使用预准备语句来阻止SQL注入:
$statement = $db_connection->prepare("SELECT * FROM `cars` WHERE (color LIKE ? OR name LIKE ?) AND enabled = 'yes' ORDER BY `ID`");
$statement->bind_param("s", "%".$key."%");
$statement->execute();
答案 3 :(得分:0)
你的SQL错了:
$query = "SELECT * FROM `cars` WHERE (color LIKE '%". $key ."%' OR name LIKE '%". $key ."%') AND enabled = 'yes' ORDER BY `ID`";
您需要将颜色和名称放在括号中,否则您可能会发现在启用字段为false时将返回行。