php - 如何根据最多 17 个不同的变量查询表?

标签 php mysql dynamic

我有一个 MySQL 表,我希望通过 POSTed 表单进行搜索。问题是最终用户可能希望单独或组合查询大约 17 个变量。这导致 else-if 语句的可能性太多。在这里询问后,我构建了以下查询:

$query = "SELECT * FROM profiles"; 

$postParameters = array("name","height","gender","class","death","appro","born","tobiano","modifier","adult","birth","sire","dam","breeder","owner","breed","location");
$whereClause = " WHERE 1 = 1";
foreach ($postParameters as $param) {
    if (isset($_POST[$param]) && !empty($_POST[$param])) {
        switch ($param) {
            case "name":
                $whereClause .= " AND ProfileName='".$_POST[$param]."' ";
                break;
            case "height":
                $whereClause .= " AND ProfileHeight='".$_POST[$param]."' ";
                break;
            case "gender":
                $whereClause .= " AND ProfileGenderID='".$_POST[$param]."' ";
                break;
            case "class":
                $whereClause .= " AND ProfileBreedClassID='".$_POST[$param]."' ";
                break;
            case "death":
                $whereClause .= " AND ProfileYearOfDeath='".$_POST[$param]."' ";
                break;
            case "appro":
                $whereClause .= " AND ProfileYearApproved='".$_POST[$param]."' ";
                break;
            case "born":
                $whereClause .= " AND ProfileYearOfBirth='".$_POST[$param]."' ";
                break;
            case "tobiano":
                $whereClause .= " AND ProfileTobianoTest='".$_POST[$param]."' ";
                break;
            case "modifier":
                $whereClause .= " AND ProfileColourModifier='".$_POST[$param]."' ";
                break;
            case "adult":
                $whereClause .= " AND ProfileAdultColourID='".$_POST[$param]."' ";
                break;
            case "birth":
                $whereClause .= " AND ProfileBirthColourID='".$_POST[$param]."' ";
                break;
            case "sire":
                $whereClause .= " AND ProfileSireReg='".$_POST[$param]."' ";
                break;
            case "dam":
                $whereClause .= " AND ProfileDamReg='".$_POST[$param]."' ";
                break;
            case "breeder":
                $whereClause .= " AND ProfileBreederID='".$_POST[$param]."' ";
                break;
            case "owner":
                $whereClause .= " AND ProfileOwnerID='".$_POST[$param]."' ";
                break;
            case "breed":
                $whereClause .= " AND ProfileBreedID='".$_POST[$param]."' ";
                break;
            case "location":
                $whereClause .= " AND ProfileLocationCountryID='".$_POST[$param]."' ";
                break;
        }
    }
}
$query .= $whereClause;

$result = mysql_query("$query");
    while ($row = mysql_fetch_array($result)) {
        echo $row['ProfileName'] . '<br/>';
    }

感谢 Saggi Malachi 提供此方法!

最佳答案

更好的方法是定义一个包含所有可能的 POST 参数的数组,然后在使用 PHP switch 语句构建 WHERE 子句时运行它们。

<?php
$postParameters = array("name","height","gender");
$whereClause = " WHERE 1 = 1";
foreach ($postParameters as $param) {
    if (isset($_POST[$param]) && !empty($_POST[$param])) {
        switch ($param) {
            case "name":
                $whereClause .= " AND ProfileName='".$_POST[$param]."' ";
                break;
            case "height":
                $whereClause .= " AND ProfileHeight='".$_POST[$param]."' ";
                break;
            // more cases....  
        }
    }
}
$query .= $whereClause;

关于php - 如何根据最多 17 个不同的变量查询表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6009035/

相关文章:

php - 为什么 fetch_assoc 返回 false?

php - 如何使用 cURL 在 PHP 中同时使用 GET 和 POST 参数发出请求?

php - mysql查询语法错误

MySQL 工作台 : Error in query (1064): Syntax error near 'VISIBLE' at line 1

c - 我确信这不应该起作用,但它确实起作用

PHP自动生成新页面

php - 动态模板表?

php - 如何在 Laravel 迁移中连接 3 个表(语法错误或访问冲突)

php - try catch block 中的未捕获错误

php - MySQL JOIN 将 PHP 变量传递给两个表