Php 我的SQL语句有什么问题?

Php 我的SQL语句有什么问题?,php,mysql,html,Php,Mysql,Html,我正在做一个网站,用户可以选择一个租赁财产,有两个领域,他们可以选择,家具和宠物。两个选择框中的选项分别为是和否 <select name="furnished"> <option value=""> <option value="yes">Yes</option> <option value="no">No</option> </select> <select name="pets">

我正在做一个网站,用户可以选择一个租赁财产,有两个领域,他们可以选择,家具和宠物。两个选择框中的选项分别为是和否

<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语句:

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子句中提供的或pets要求的结果,而我需要它返回满足where子句中提供的和pets要求的结果

因此,它当前将返回一个结果,该结果显示“家具”设置为“是”,而“宠物”设置为“否”。 如何让它返回所有结果,并将“已提供”设置为“是”,将“宠物”设置为“是”


我的SQL语句有什么问题吗?

把各种
'd语句放在旁边

$sql .= ' AND (furnished = "yes" OR furnished = "partially")';

$sql .= ' AND (pets = "yes" OR pets = "cats" OR pets = "dogs")';

等等。

在运算符优先级中位于
之前,因此您的查询如下

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"
这和你想象的不太一样。试一试

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")
甚至更好

SELECT * FROM properties 
WHERE num_bedrooms >= 1 
AND num_bathrooms >= 1 
AND furnished IN ("yes", "partially")
AND pets IN ("yes", "cats", "dogs")

你不应该做
SELECT*
尝试命名你需要的列

您没有像应该的那样转义输入变量。看看数据库库中使用的转义/引用方法…非常感谢您的帮助!为什么我不选择*很重要?我有很多列需要为每个属性返回,所以我不认为把它们全部写出来有什么意义。除非你真的需要所有的列,*将导致php和mysql之间不必要的通信开销(内存和cpu白白浪费)。(除其他原因外……)
SELECT * FROM properties 
WHERE num_bedrooms >= 1 
AND num_bathrooms >= 1 
AND furnished IN ("yes", "partially")
AND pets IN ("yes", "cats", "dogs")