如何在php中使用switch/case获得多个get参数?

如何在php中使用switch/case获得多个get参数?,php,database,loops,get,switch-statement,Php,Database,Loops,Get,Switch Statement,我对编程非常陌生,目前正在开发视频游戏数据库。我被困在一个点上,我想用“GET”方法过滤我的条目。在我想搜索多个参数之前,一切都很正常,因为主要问题是查看我的switch/case语句多次。下面是代码: $columnName = NULL; $searchValue = NULL; switch ($_GET) { case isset($_GET['name']): $columnName = "games.name"; $s

我对编程非常陌生,目前正在开发视频游戏数据库。我被困在一个点上,我想用“GET”方法过滤我的条目。在我想搜索多个参数之前,一切都很正常,因为主要问题是查看我的switch/case语句多次。下面是代码:

    $columnName = NULL;
    $searchValue = NULL;

    switch ($_GET) {
    case isset($_GET['name']):
        $columnName = "games.name";
        $searchValue = $_GET['name'];
        break;
    case isset($_GET['developer']):
        $columnName = "developer.name";
        $searchValue = $_GET['developer'];
        break;
    case isset($_GET['device']):
        $columnName = "devices.name";
        $searchValue = $_GET['device'];
        break;
    case isset($_GET['company']):
        $columnName = "company.name";
        $searchValue = $_GET['company'];
        break;
    case isset($_GET['medium']):
        $columnName = "medium.name";
        $searchValue = $_GET['medium'];
        break;
    default:
        break;
}

if ($columnName !== null && $searchValue !== null) {
    $selectStatement .= " WHERE " . $columnName . " LIKE '%" . $searchValue . "%'";
}
变量$selectStatement是我的数据库条目的选择语句,但我认为完整地发布它是没有帮助的

提前谢谢

编辑:

我很惊讶,几分钟后我就得到了这么多答案,非常感谢! 但是我尝试了你的每一个答案,没有一个对我有效。例如,如果我现在搜索两个参数,它只识别最后一个参数。 在这个例子中
http://localhost/index.php?developer=ubisoft&medium=disc

它只显示介质,而不显示开发人员…

您应该对多个条件使用if语句,或者不要使用break语句(不推荐)

使用静态获取值进行演示

循环浏览
columnName

$selectStatement = '';
if ($columnName !== null && $searchValue !== null) {
    $length = count($columnName);
    for ($i=0; $i < $length; $i++) {
        if ($i == 0) 
            $selectStatement .= " WHERE " . $columnName[$i] . " LIKE '%" . $searchValue[$i] . "%'";
        else
            $selectStatement .= " AND " . $columnName[$i] . " LIKE '%" . $searchValue[$i] . "%'";           
    }
}

echo $selectStatement;

您应该对多个条件使用if语句,或者不要使用break语句(不推荐)

使用静态获取值进行演示

循环浏览
columnName

$selectStatement = '';
if ($columnName !== null && $searchValue !== null) {
    $length = count($columnName);
    for ($i=0; $i < $length; $i++) {
        if ($i == 0) 
            $selectStatement .= " WHERE " . $columnName[$i] . " LIKE '%" . $searchValue[$i] . "%'";
        else
            $selectStatement .= " AND " . $columnName[$i] . " LIKE '%" . $searchValue[$i] . "%'";           
    }
}

echo $selectStatement;

为什么使用switch/case语句?它适用于在元素集中搜索元素的一次出现。只需使用if语句。它将如下所示:

$columns = array();

if(isset($_GET["column1"])) {
    $columns []= $_GET["column1"];      
}

if(isset($_GET["column2"])) {
    $columns []= $_GET["column2"];      
}

$columnsString = implode(",", $columns);

// You will get string like "column1,column2"
// And you can make the same thing with your WHERE statements

为什么使用switch/case语句?它适用于在元素集中搜索元素的一次出现。只需使用if语句。它将如下所示:

$columns = array();

if(isset($_GET["column1"])) {
    $columns []= $_GET["column1"];      
}

if(isset($_GET["column2"])) {
    $columns []= $_GET["column2"];      
}

$columnsString = implode(",", $columns);

// You will get string like "column1,column2"
// And you can make the same thing with your WHERE statements

开关不适合您的情况

你可以有一个IF-ELSE条件

if ( isset($_GET['name']) ){
   $columnName = "games.name";
   $searchValue = $_GET['name'];
}
elseif( isset($_GET['developer']) ) {
   $columnName = "developer.name";
   $searchValue = $_GET['developer'];
}
elseif(){

}
and so on....
另一种方法是使用数组将参数映射到列名

$_GET['type'] --> this can be your name, developer, medium, device, company...
$_GET['value'] --> your value for name or developer or medium....

$mapping = [
  'name' => 'games.name',
  'developer' => 'developer.name',
  'device' => 'device.name',
  'medium' => 'medium.name'
];

$columnName  = $mapping[$_GET['type']];
$searchValue = $_GET['value'];

$selectStatement .= " WHERE " . $columnName . " LIKE '%" . $searchValue . "%'";

开关不适合您的情况

你可以有一个IF-ELSE条件

if ( isset($_GET['name']) ){
   $columnName = "games.name";
   $searchValue = $_GET['name'];
}
elseif( isset($_GET['developer']) ) {
   $columnName = "developer.name";
   $searchValue = $_GET['developer'];
}
elseif(){

}
and so on....
另一种方法是使用数组将参数映射到列名

$_GET['type'] --> this can be your name, developer, medium, device, company...
$_GET['value'] --> your value for name or developer or medium....

$mapping = [
  'name' => 'games.name',
  'developer' => 'developer.name',
  'device' => 'device.name',
  'medium' => 'medium.name'
];

$columnName  = $mapping[$_GET['type']];
$searchValue = $_GET['value'];

$selectStatement .= " WHERE " . $columnName . " LIKE '%" . $searchValue . "%'";

使用多个
if
语句而不是
switch
我想如果不使用“break”,那么它会检查每个参数。但是您需要更改值和列值以包含所有参数。@MrKiwey更新了我的答案。请检查使用多个
if
语句而不是
switch
我想如果您不使用“break”,那么它会检查每个参数。但是,您需要更改值和列值以包含所有参数。@MrKiwey更新了我的答案。请检查添加了带静态GET params的演示链接也添加了带静态GET params的演示链接