php - 如何根据表单选择构建正确的查询?

标签 php mysql

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

假设我的表单有 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 为可选,默认值为“任意”。

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

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

到目前为止我尝试过:

将 $_POST 值放入变量中,然后使用 IF 检查该值是否为“any”,我这样做了:

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

所以最终的查询看起来像

从列表中选择 ID WHERE Swimming_pool='$swimming_pool'

哪个不起作用,不确定是否有效? OR 1=1 应该选择任何内容?

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

最佳答案

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

$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 子句作为动态数组传递,但这只是一个非常简单的示例,可帮助您顺利进行。

关于php - 如何根据表单选择构建正确的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18649232/

相关文章:

PHP:从查询结果发送批量电子邮件

php - 从两个不同的数据库查询中查找两个计数列之间的差异并在 PHP 中显示结果

php - Wordpress - 以编程方式添加不生成缩略图的产品

php - 使用 Prestashop 1.6 在模块中获取产品类别名称

php - 某些表格后的分页符

php - 如何使用 PHP 和 Zend Framework 进行文件上传?

mysql - 用于显示额外列的 SELECT 语句

php - 如何结合多个能够保存数据的查询

PHP 特殊字符解析错误

java.net.ConnectException : failed to connect to localhost/127. 0.0.1(端口 80):连接失败:ECONNREFUSED(连接被拒绝)