0

我试图弄清楚如何根据我拥有的表单构建正确的查询,我知道在必须设置所有表单值时如何构建查询,但是我的表单也有可选值,我真的不能弄清楚如何做到这一点。

假设我的表单有 4 个选择:

<select name="1" id="1">
    <option>Select Value</option>
    <option value="rent">rent</option>
    <option value="buy">buy</option>
</select>

<select name="2" id="2">
    <option>Select Value</option>
    <option value="house">house</option>
    <option value="flat">flat</option>
</select>

<select name="3" id="3">
    <option>Swimming pool</option>
    <option value="any">any</option>
    <option value="yes">yes</option>
    <option value="no">no</option>
</select>

<select name="4" id="4">
    <option>Furniture</option>
    <option value="any">any</option>
    <option value="yes">yes</option>
    <option value="no">no</option>
</select>

选择 1 & 2 是必需的,而 3 & 4 是可选的,默认值为“any”。

我提交的示例表单是:1 = 租金 | 2 = 房子 | 3 = 任意 | 4 = 任何

正确的 SELECT 查询是什么样的?

到目前为止我尝试过:

将 $_POST 值放入变量中,然后使用 IF 检查,如果该值为“任何”,我这样做了:

if($swimming_pool == 'any') { $swimming_pool = "? OR 1=1"; }

所以最终的查询看起来像

select id from listings WHERE swimming_pool='$swimming_pool'

哪个不起作用,不确定是否? OR 1=1应该选择任何东西?

我在另一个问题中提到了这一点。

4

1 回答 1

1

如果他们输入“任何”,那么您希望将其完全排除在查询之外。基本上,在将查询字符串传递给数据库之前动态构建它。像这样的东西(假设所有数据都已被清理以用于数据库查询):

$where = '1 = 1'

[...]

if ($swimmingpool != 'any')
    $where .= " and swimming_pool = '$swimmingpool'";

if ($furniture != 'any')
    $where .= " and furniture = '$furniture'";

$querystring = "SELECT * FROM some_table WHERE $where ORDER BY whatever";
// Then pass $querystring when querying the database

如果您使用的是 PDO,那么您应该能够将您的where子句作为动态数组传递,但这只是一个非常简单的示例,可以帮助您顺利进行。

于 2013-09-06T03:22:09.750 回答