我有这个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(例如)如果用户将值保留为空(选择...),则在这种情况下的结果将是仅基于类型的所有活动的名称。如果他选择时间和类型,则会根据活动的时间和类型更多地指定结果。
我该怎么办?
谢谢!
答案 0 :(得分:0)
为什么要运行完整的动态构建查询?
SELECT * FROM MyTable WHERE (1=? AND time1=?) AND type1=?;
具有参数化值:isset($_POST['time']) ? 1 : 0
,isset($_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']."'";
}
}