0

所以我正在尝试创建一个 MySQL 命令来搜索表。我想要它做的是:

我的表有 4 列:id, categories, brands, names.

在搜索页面上的 php/html 中,用户从下拉列表中选择一个类别。这是类别,因此将其发布category到搜索页面。然后在文本框中输入关键字。这将发布keyword到搜索页面。

我想创建一个 MySQL 命令来选择已categories发布的类别,然后在这些选定的行中搜索我在brands, 和names列中发布的关键字

这是我尝试过的:

"SELECT brands, names 
   FROM tableName 
  WHERE categories LIKE".$_GET['category']." 
    AND (brands LIKE ".$_GET['keyword']." 
     OR names LIKE ".$_GET['keyword'].");";
4

2 回答 2

1

您需要在 SQL 中为字符串加上引号。试试这个:

"SELECT brands, names 
   FROM tableName 
  WHERE categories LIKE '".$_GET['category']."' 
    AND (brands LIKE '".$_GET['keyword']."' 
         OR names LIKE '".$_GET['keyword']."');";

除非您期望会有变化,例如几个开头相同的单词,否则使用 LIKE 并没有太大的作用。如果您期望这一点,则需要使用通配符来指定您期望方差的位置,例如

brands LIKE '".$_GET['keyword']."%' 
// User enters 'Mc', SQL end up as:
brands LIKE 'Mc%'
// Columns matched: 'McDonalds' 'McHenry'

更多示例在这里

如果您不想这样做,只需使用 = 而不是 LIKE。

您还需要首先使用正则表达式或类似方法来清理这些变量,因为这目前允许有人使用SQL 注入攻击您的服务器。

于 2012-07-26T21:47:32.127 回答
0

接受您的命令,并在您的 SQL 文档编辑器中使用它,我认为这与您的

(brands LIKE ".$_GET['keyword']." OR names LIKE ".$_GET['keyword'].");"

我知道在 sqlite 中,你会使用等号,而不是 LIKE,

 (brands='".$_GET['keyword']."' OR names='".$_GET['keyword']."');"
于 2012-07-26T21:50:21.727 回答