以下代码需要使用用户提供的 3 个变量。默认情况下,所有这些变量都等于 0。
- 时间(文本框)
- 城市(下拉列表)
- 类型(下拉列表)
例如,如果时间和城市由用户给出,但让类型为零,它将不会返回任何结果。 我的问题是什么是修改我现有代码的有效且高效的方法,以便如果用户选择不选择时间、城市或类型或这些的任意组合,将会返回结果?
例如,如果时间 21:00 加上城市 数字3,它将显示所有满足2 个条件的类型被列出。
$question= 'SELECT * FROM events WHERE ABS(TIMESTAMPDIFF( HOUR , `time`, :time )) < 2 AND city=:city AND type=:type';
$query = $db->prepare($question);
$query->bindValue(":time", $time, PDO::PARAM_INT);
$query->bindValue(":city", $city, PDO::PARAM_INT);
$query->bindValue(":type", $type, PDO::PARAM_INT);
$query->execute();
最佳答案
<?php
$question= 'SELECT * FROM events WHERE ';
$hasTime = false;
if(!empty($time)) { // @note better validation here
$hasTime = true;
$question .= 'ABS(TIMESTAMPDIFF( HOUR , `time`, :time )) < 2 ';
}
$hasCity = false;
if(!empty($city)) { // @note better validation here
$hasCity = true;
$question .= 'AND city=:city ';
}
$hasType = false;
if(!empty($type)) { // @note better validation here
$hasType = true;
$question .= 'AND type=:type';
}
$query = $db->prepare($question);
if($hasTime)
$query->bindValue(":time", $time, PDO::PARAM_INT);
if($hasCity)
$query->bindValue(":city", $city, PDO::PARAM_INT);
if($hasType)
$query->bindValue(":type", $type, PDO::PARAM_INT);
$query->execute();
$results = $query->fetchAll();
if(empty($results))
echo 'no results';
else
// $results is an array of arrays
关于php - 即使用户没有填写表单中的所有条件,也会从 mySQL 返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11583178/