数据库搜索问题PHP

时间:2009-12-15 16:16:57

标签: php sql mysql

我的代码就是这个,

$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因某种原因返回空。

4 个答案:

答案 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时将返回行。