我正在做一个网站,用户可以选择一个出租物业,有两个领域,他们可以选择,家具和宠物。在两个选择框中的选项是是和否。我的SQL语句有什么问题?
<select name="furnished">
<option value="">
<option value="yes">Yes</option>
<option value="no">No</option>
</select>
<select name="pets">
<option value="">
<option value="yes">Yes</option>
<option value="no">No</option>
</select>
我正在编写基于用户在这些字段中选择的SQL语句。
$sql = 'SELECT *
FROM properties
WHERE num_bedrooms >= ' . $_GET['num_bedrooms'] .
' AND num_bathrooms >= ' . $_GET['num_bathrooms'];
if($_GET['furnished'] == 'yes') { //if the furnished is set to yes
$sql .= ' AND furnished = "yes" OR furnished = "partially"';
} else if($_GET['furnished'] == 'no') { //if the furnished is set to no
$sql .= ' AND furnished = "no" OR furnished = "description"';
}
if($_GET['pets'] == 'yes') { //if the pets is set to yes
$sql .= ' AND pets = "yes" OR pets = "cats" OR pets = "dogs"';
} else if($_GET['pets'] == 'no') { //if the pets is set to no
$sql .= ' AND pets = "no" OR pets = "description"';
}
如果用户是选择有家具,我希望它显示配(是),或者是部分家具(部分)的所有属性。如果用户选择否,我希望它显示所有未提供的属性(否)或具有特殊描述(描述)的属性。
如果用户为宠物选择是,我希望它显示允许所有宠物(是)或只允许猫(猫)或只允许狗(狗)的所有属性。如果用户选择否,我希望它显示所有不允许宠物的属性(否)或具有特殊描述(描述)的属性。
作为一个例子,这是输出的SQL语句,如果用户选择上提供的是的是的宠物:
SELECT * FROM properties
WHERE num_bedrooms >= 1
AND num_bathrooms >= 1
AND furnished = "yes" OR furnished = "partially"
AND pets = "yes" OR pets = "cats" OR pets = "dogs"
的问题是,它现在将返回满足装饰或宠物的任何结果在where条款中的要求,而我需要它返回符合where条款中的家具和宠物要求的结果。
所以它现在会返回一个结果,说有Furnished设置为yes,宠物设置为no。 我怎样才能返回所有结果与家具设置为是和宠物设置为是?
我的SQL语句有什么问题?
你不会像你应该逃避输入变量。看看[mysql_real_escape_string()](http://php.net/manual/en/function.mysql-real-escape-string.php)或[PDO :: quote()](http:// php。 net/manual/en/pdo.quote.php)或数据库库中使用的转义/引用方法... – rodneyrehm