Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.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/8/mysql/61.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_Filter - Fatal编程技术网

使用PHP和MySQL查询的网站过滤器

使用PHP和MySQL查询的网站过滤器,php,mysql,search,filter,Php,Mysql,Search,Filter,好的,在我的网站上,我们有一个过滤部分,用户可以根据游戏的类型或游戏将要玩的模式选择过滤游戏 我正在尝试编写一个查询,该查询将查询数据库,如果流派是唯一的集合项,则按流派进行过滤;如果model是唯一的集合项,则按model进行过滤;如果两者都已设置,则按两者进行过滤。我希望代码也能高效运行,因此,如果您知道一种很好的方法来执行此操作,那将非常高兴听到。注意,下面的答案假设表单字段包含要查询的值。不要忘记错误检查,您需要验证$\u GET/$\u POST变量以防止SQL注入类型的攻击 // G

好的,在我的网站上,我们有一个过滤部分,用户可以根据游戏的类型或游戏将要玩的模式选择过滤游戏


我正在尝试编写一个查询,该查询将查询数据库,如果流派是唯一的集合项,则按流派进行过滤;如果model是唯一的集合项,则按model进行过滤;如果两者都已设置,则按两者进行过滤。我希望代码也能高效运行,因此,如果您知道一种很好的方法来执行此操作,那将非常高兴听到。

注意,下面的答案假设表单字段包含要查询的值。不要忘记错误检查,您需要验证$\u GET/$\u POST变量以防止SQL注入类型的攻击

// Generally you would have a function to construct your query here:
function select($where,$orderBy){
...
}

// Then when you when you are ready to build your query

$where = "";

if($model !== 'all'){                  
  $where .= "model ='".$model."'";
  $orderBy = "model ASC";
}

if($genre !== 'all'){                  
  if(isset($model)&&($model !== 'all')){
    $where .= " AND ";
  }
  $where .= "genre <='".$genre."'";
  $orderBy = "genre ASC";
}

// Adding additional filters will look like this

if($additionalFilter !== 'all'){
  if(isset($genre)&&($genre !== 'all')||isset($model)&&($model !== 'all')){
    $where .= " AND ";
  }                  
  $where .= "additionalFilter <='".$additionalFilter."'";
  $orderBy = "additionalFilter ASC";
}

// And finally to put it all together:

select($where, $orderBy);
//通常,您可以在此处使用函数构造查询:
函数选择($where,$orderBy){
...
}
//然后,当您准备好构建查询时
$where=“”;
如果($model!=='all'){
$where.=“model=”。“$model.”;
$orderBy=“型号ASC”;
}
如果($genre!=='all'){
如果(isset($model)&($model!=='all')){
$where.=“和”;
}

$where.=“genre注意,下面的答案假设表单字段包含要查询的值。不要忘记错误检查,并且您需要验证$\u GET/$\u POST变量以防止SQL注入类型的攻击

// Generally you would have a function to construct your query here:
function select($where,$orderBy){
...
}

// Then when you when you are ready to build your query

$where = "";

if($model !== 'all'){                  
  $where .= "model ='".$model."'";
  $orderBy = "model ASC";
}

if($genre !== 'all'){                  
  if(isset($model)&&($model !== 'all')){
    $where .= " AND ";
  }
  $where .= "genre <='".$genre."'";
  $orderBy = "genre ASC";
}

// Adding additional filters will look like this

if($additionalFilter !== 'all'){
  if(isset($genre)&&($genre !== 'all')||isset($model)&&($model !== 'all')){
    $where .= " AND ";
  }                  
  $where .= "additionalFilter <='".$additionalFilter."'";
  $orderBy = "additionalFilter ASC";
}

// And finally to put it all together:

select($where, $orderBy);
//通常,您可以在此处使用函数构造查询:
函数选择($where,$orderBy){
...
}
//然后,当您准备好构建查询时
$where=“”;
如果($model!=='all'){
$where.=“model=”。“$model.”;
$orderBy=“型号ASC”;
}
如果($genre!=='all'){
如果(isset($model)&($model!=='all')){
$where.=“和”;
}

$where.=“genre最好的方法是首先将数据库结构如下:

Table 'game':
| id | title | description |
Table 'models':
| id | name | description |
Table 'genres':
| id | name | description |
Table 'game2model':
| game_id (FK to game.id) | model_id (FK to models.id) |
Table 'game2genre':
| game_id (FK to game.id) | genre_id (FK to genres.id) |
以这种方式规范化数据库后,执行SQL筛选将非常简单。此伪SQL代码将使您走上正确的轨道:

[我们假设您的类型ID为1,2,3,模型ID为10,11和12]


选择g.id、g.name、g.description
来自游戏g、游戏2流派gg、游戏2模型gm
其中gg.game_id=g.id
和gm.game_id=g.id
(1,2,3)中的gg.genre_id
(10,11,12)中的gm.model_id
按g.name ASC订购

最好的方法是首先按照这样的方式构建数据库:

Table 'game':
| id | title | description |
Table 'models':
| id | name | description |
Table 'genres':
| id | name | description |
Table 'game2model':
| game_id (FK to game.id) | model_id (FK to models.id) |
Table 'game2genre':
| game_id (FK to game.id) | genre_id (FK to genres.id) |
以这种方式规范化数据库后,执行SQL筛选将非常简单。此伪SQL代码将使您走上正确的轨道:

[我们假设您的类型ID为1,2,3,模型ID为10,11和12]


选择g.id、g.name、g.description
来自游戏g、游戏2流派gg、游戏2模型gm
其中gg.game_id=g.id
和gm.game_id=g.id
(1,2,3)中的gg.genre_id
(10,11,12)中的gm.model_id
按g.name ASC订购

假设变量
$genre
$model
已经转义。仅演示代码,没有明确的安全性

$sqlQuery = 'select * from games where 1=1';
if ( !empty($genre) ) $sqlQuery .= " and genre=$genre";
if ( !empty($model) ) $sqlQuery .= " and model=$model";

假设变量
$genre
$model
已经转义。仅演示代码,没有明确的安全性

$sqlQuery = 'select * from games where 1=1';
if ( !empty($genre) ) $sqlQuery .= " and genre=$genre";
if ( !empty($model) ) $sqlQuery .= " and model=$model";

如果他后来决定需要五个或六个过滤器而不是两个,这可能会变得非常混乱。虽然您的答案较短,并且可能用于缩短上面的代码,但通常需要五个或六个过滤器的查询将非常复杂,足以保证附加逻辑。如果他后来决定需要五个或六个过滤器,这可能会变得非常混乱n而不是两个。虽然您的答案较短,并且可能用于缩短上述代码,但通常需要5或6个筛选器的查询将非常复杂,足以保证额外的逻辑。不要忘记为安全起见转义您的输入。太棒了!简单,完全符合我的需要!谢谢!是的,我知道如何转义输入s和保护所有内容。实际上我现在有一个单独的问题。查看我的查询,我无法确定最后的位置。$sql=“按评级从appinfo订单中选择*\u分数/rating\u num DESC LIMIT 5”;除非有办法将其放在末尾而不抛出错误。两个选项1.在ifs
$sqlQuery.='order by…limit…’之后再添加一行;
2.首先将所有ifs放入名为$sqlWhere或类似的变量中,然后在末尾:
$sqlQuery=“select*from…$sqlWhere order by…limit…”
。无论哪一个更适合你。谢谢,现在一切都好了:DDon别忘了为安全起见转义你的输入。太棒了!很简单,完全符合我的需要!谢谢!是的,我知道如何转义输入并保护所有内容。我现在实际上有一个单独的问题。看看我的查询,我不知道最后在哪里。$sql=“按评分/评分数量描述限制5从appinfo订单中选择*”;除非有办法将其放在末尾而不抛出错误。两个选项1.在ifs
$sqlQuery.='order by…limit…’之后再添加一行;
2.首先将所有ifs放入名为$sqlWhere或类似的变量中,然后在末尾:
$sqlQuery=“select*from…$sqlWhere order by…limit…”
。随便哪个更适合你。谢谢,现在一切都好了:D