我有一个 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/