php - 如何使用单个发布的参数来运行 BETWEEN 或 IN(从表中选择参数)类型查询?

标签 php mysql

我有一个 bootstrap 4 表单,将数据发布到 PHP 页面。其中一个变量是 $_POST['age'];

我想以这样的方式使用此变量:当 $_POST['age'] 等于 NULL 时,$age = 'IN("SELECTage来自配置文件"),否则$minage = $age-3 和 $maxage = $age+3。我尝试了以下具有不同变体的代码,但它不适用于 $_POST['age'] = NULL

的情况
$age = $_POST['age'];
$minage = $age - 2;
$maxage = $age + 3;

if($age == NULL) {
  $given_age = 'IN("SELECT age FROM profiles")';
}else {

  $given_age = 'BETWEEN '. $minage.' AND '. $maxage;
}

echo $given_age;

html表单如下:

<div class="form-group">
   <label for="age">Preferred Age Group</label>
   <select class="form-control" name="age" id="age" required>
   <option data-hidden="true" value="Null">No Preference</option>
   <option data-hidden="true" value="20">18-22 Years</option>

   </select>
</div>

$given_age 的结果将用于 MySQL 查询。

最佳答案

您应该从 value="Null" 中删除字符串 Null 并将其保留为空,即 value=""。如果您传递整数,则该字符串没有位置。

您可以使用isset()查明该值是否已在 HTML 表单中输入,并采取相应措施:

if(isset($_POST['age'])) {
  $age = (int) $_POST['age']; // make the value an integer
  $minage = $age - 2;
  $maxage = $age + 3;
  $given_age = 'BETWEEN '. $minage.' AND '. $maxage;
}else {
  $given_age = 'IN("SELECT age FROM profiles")';
}

如果您坚持使用 Null 作为值,那么除了 isset 之外,您还应该检查它是否等于字符串:$_POST['age'] === 'Null'

您确实应该使用参数化准备好的语句,而不是手动构建查询。它们由 PDO 提供或通过 MySQLi 。永远不要相信任何类型的输入,尤其是来自客户端的输入。即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data .

关于php - 如何使用单个发布的参数来运行 BETWEEN 或 IN(从表中选择参数)类型查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56611061/

相关文章:

java - 连接 Spring-Boot 到 MySQL

mysql - sql LEFT JOIN查询的使用方法

php - SQL 获取组 id 的唯一值,其中成员 id 是一个或多个

php - PHP 中的 URL 调用

php - 无法加载 cakephp 模型

mysql - 从表中选择接下来的 7 天

PHP:反转链接回显的顺序

php - PHP 中的 Lambda 函数不符合逻辑

php - mysqli_num_rows()期望参数1为mysqli_result php

MySQL:在一对一的基础上加入