如果值为空,如何忽略行的SQL Select命令

时间:2016-10-07 15:57:22

标签: php mysql sql database

我有这个SQL查询:

$sql2 = "SELECT * FROM MyTable WHERE time1='".$_POST['time']."' AND type1='".$_POST['type']."';

结果:

$result1 = $conn->query($sql2);

if ($result1->num_rows > 0) {
    // output data of each row
    while($row = $result1->fetch_assoc()) {

        echo $row["name1"];
  • name1 row是数据库中活动的名称。

HTML表单包含以下两个选择列表:

<select id="time" name="time" required="" data-do-validate="true">
    <option value="">Select ...</option> // this is the NULL value
    <option value="time1">Type 1</option>
    <option value="time2">Type 2</option>
    <option value="time3">Type 3</option>
    <option value="time4">Type 4</option>
                        </select>

<select id="type" name="type" required="" data-do-validate="true">
    <option value="">Select ...</option> // this is the NULL value
    <option value="type1">Type 1</option>
    <option value="type1">Type 2</option>
    <option value="type1">Type 3</option>
    <option value="type1">Type 4</option>
                        </select>

所以我尝试做的是从数据库中选择HTML表单提交的匹配数据的所有活动的名称。

但是我还想要的是忽略SQL Select for the Time(例如)如果用户将值保留为空(选择...),则在这种情况下的结果将是仅基于类型的所有活动的名称。如果他选择时间和类型,则会根据活动的时间类型更多地指定结果。

我该怎么办?

谢谢!

3 个答案:

答案 0 :(得分:0)

为什么要运行完整的动态构建查询?

SELECT * FROM MyTable WHERE (1=? AND time1=?) AND type1=?;

具有参数化值:isset($_POST['time']) ? 1 : 0isset($_POST['time']) ? $_POST['time'] : null$_POST['type']

MySQL将处理不执行(1=0 AND time1=?)部分的优化。

答案 1 :(得分:-1)

<LI>

答案 2 :(得分:-1)

你可以根据$ _POST值构建你的Statement(顺便说一句,在生产中你不应该直接在SQL语句中使用$ _POST值。)

$connect = "";
$sql2 = "SELECT * FROM MyTable ";

if($_POST['time']!='' || $_POST['type']!='') {
  $sql2 .= "WHERE ";
  if($_POST['time']!='') {
      $sql2 .= "time1='".$_POST['time']."'";
      $connect = " AND ";
  }
  if($_POST['type']!='') {
     $sql2 .= $connect . "type1='".$_POST['type']."'";
  }
}