如何在php中运行查询,其中未选择值?

如何在php中运行查询,其中未选择值?,php,mysql,sql,Php,Mysql,Sql,因此,我试图为sql表创建一个过滤器。所以本质上用户选择了多个下拉列表,我根据这些值运行对sql的查询 这就是我填充下拉列表的方式: <?php $conn = sqlsrv_connect( $serverName, $connectionInfo); $sql = "SELECT [EQUIP TYPE] as EQUIPTYPE, PROPERTY, AUTOMATEDSYSTEM FROM TrimTable"; $query = sqlsrv_query($conn,$sql);

因此,我试图为sql表创建一个过滤器。所以本质上用户选择了多个下拉列表,我根据这些值运行对sql的查询

这就是我填充下拉列表的方式:

<?php
$conn = sqlsrv_connect( $serverName, $connectionInfo);
$sql = "SELECT [EQUIP TYPE] as EQUIPTYPE, PROPERTY, AUTOMATEDSYSTEM FROM TrimTable";
$query = sqlsrv_query($conn,$sql);
if ($query === false)
{  
    echo "Could not link to SQL Server";
}
while ($row = sqlsrv_fetch_array($query))
{   
    $EQUIPTYPE[] = "$row[EQUIPTYPE]";
    $PROPERTY[] = "$row[PROPERTY]"; 
    $AUTOMATEDSYSTEM[] = "$row[AUTOMATEDSYSTEM]";
}
echo "<div><table class='SearchBox'>";
echo "<thead></thead>";
    echo "<tbody>";
        echo "<tr>";
            $EQUIPTYPE_unique = array_unique($EQUIPTYPE);
            sort($EQUIPTYPE_unique);
            echo "<td>Equip Type</td>";
            echo "<td><select style='width: 110px;' name='EquipType'>";
            echo "<option selected='selected' value='%'>Select</option>";
            foreach($EQUIPTYPE_unique as $key => $value):
                echo '<option value="'.$value.'">'.$value.'</option>';
            endforeach;
            echo "</select></td>";


            $PROPERTY_unique = array_unique($PROPERTY);
            sort($PROPERTY_unique);
            echo "<td>Property</td>";
            echo "<td><select style='width: 110px;' name='PropertyOption'>";
            echo "<option selected='selected' value='%'>Select</option>";
            foreach($PROPERTY_unique as $key => $value):
                echo '<option value="'.$value.'">'.$value.'</option>';
            endforeach;
            echo "</select></td>";

            $AUTOMATEDSYSTEM_unique = array_unique($AUTOMATEDSYSTEM);
            sort($AUTOMATEDSYSTEM_unique);                        
            echo "<td>Automated System</td>";
            echo "<td><select style='width: 110px;' name='AutomatedSystem'>";
            echo "<option selected='selected' value='%'>Select</option>";
            foreach($AUTOMATEDSYSTEM_unique as $key => $value):
                echo '<option value="'.$value.'">'.$value.'</option>';
            endforeach;
            echo "</select></td>";   
        echo "</tr>";
    echo "</tbody>";
echo "</table>";
?> 

现在,一旦选择下拉列表,我就有一个搜索按钮,它执行新的php代码,如下所示:

<?php

session_start();
$_SESSION['AutomatedSystem'] = $_POST['AutomatedSystem'];
$AutomatedSystemOp = $_SESSION['AutomatedSystem'];
$_SESSION['PropertyOption'] = $_POST['PropertyOption'];
$PropertyOp = $_SESSION['PropertyOption'];
$_SESSION['EquipType'] = $_POST['EquipType'];
$EquipTypeOp = $_SESSION['EquipType'];

$conn = new PDO('sqlsrv:Server=mzrefd39,1433;Database=ger_mapv', $username, $password);
$sth = $conn->prepare("SELECT TAG,DESCRIPTION FROM TrimTable WHERE [AUTOMATED SYSTEM] LIKE ? AND [EQUIP TYPE] LIKE ? AND PROPERTY LIKE ? ORDER BY TAG");
$sth->execute(array($AutomatedSystemOp, $EquipTypeOp, $PropertyOp));
$data = $sth->fetchAll();

$length = count($data);
for($i=0; $i<$length; $i++)
{
    // This is where i just arrange the data way I want to?
} 

?> 

现在的问题是,可能是第一组代码上的一个my下拉列表未被选中,因此其左键处于默认状态“Select”,value=“%”。这意味着在运行表(第二个块)中数据的查询时,它会查看所有内容(%)。有没有办法,我可以给它一个值,它根本不寻找它(因为不关心字段)。我觉得那样会更快?可能吗

更新


我想我不清楚。我有三个选择。假设我为EQUIPTYPE和AUTOMATEDSYSTEM选择值。我将属性保留为其默认值,即select。因此,当我的第二个代码块运行时,它只针对EQUIPTYPE和AUTOMATEDSYSTEM运行,第三个值属性是%,它不需要运行。

当然这里有一个简单的示例(未测试)

假设我们有以下选择:

<select name="id" >
   <option value="" > - Pick an ID- </option>  <!-- default value -->
   <option value="1" > ID One </option>
</select>

<select name="color" >
   <option value="" > - Pick an Color- </option>  <!-- default value -->
   <option value="red" > Red </option>
</select>

添加额外的
$where
元素非常简单,唯一的缺点是如果您有更复杂的查询,或者需要同时使用

的内容,当然可以。只是不要把它放在你的查询中。^或者限制它,比如
limit25
等等。。所以它只获取前n个结果。如果您有一个自动递增ID,您可以执行
其中ID=0
,这将永远不会发生,因此会给您一个空结果。但最好的方法是,如果不满足某些最小搜索要求,就不要进行搜索,这完全取决于您想要的行为。。。例如
$where[]='id=:id'
,然后您可以检查
是否为空($where)
而不进行搜索,如果您确实有一些只需执行
$sql.=内爆('and',$where))
@ArtisiticPhoenix,你能举个例子吗?
$sql = 'SELECT * FROM table WHERE';
$where = array();
$param = array();

if ( !empty( $_POST['id'] ) ){
     //id is empty '' by default
     $where[] = 'id = :id';
     $param[':id'] = $_POST['id'];
}

if ( !empty( $_POST['color'] ) ){
     //color is empty '' by default
     $where[] = 'color = :color';
     $param[':color'] = $_POST['color'];
}

///etc ...

$result = array();
if( !empty( $where ) ){
     $stmt = $sth->prepare( $sql . implode( ' AND ', $where ));
     $stmt->execute( $param );
     $result = $stmt->fetchAll( PDO::FETCH_ASSOC );
}else{
      //do some thing for no search>?
}

return $result;