php - 基于多个变量和条件构建动态 MySQL 查询

标签 php mysql dynamic conditional-statements

我希望这个标题能够很好地表达这个问题。我正在尝试基于现有的多个 $vars 构建动态查询。我试图使用一个简单的 if/ifelse/else block 来完成这项工作,但似乎无法让它正常工作。第一个 if 语句相应执行,但第三个语句失败。我是 PHP 新手,所以我认为这是初学者的错误。我还相信很可能有一种更有说服力的方法来达到预期的结果。

基本上,用户在多个文本字段中输入一些内容。 3 个字段中只有一个需要包含值,但 2 个或所有 3 个字段也可以。如果字段中不存在该值,则应根据提供的值生成查询。我正在验证并为每个输入创建一个变量,而不是检查这些变量是否包含值或存在。

  //////////////////////////////////////////////////////

  if(isset($_POST['inputName']) && $_POST['inputName'] != ""){
  $inputName = preg_replace('#[^a-z 0-9?!]#i', '', $_POST['inputName']);
  }

  if(isset($_POST['inputState']) && $_POST['inputState'] != ""){
  $inputState = preg_replace('#[^a-z 0-9?!]#i', '', $_POST['inputState']);
  }

  if(isset($_POST['inputCost']) && $_POST['inputCost'] != ""){
  $inputCost = preg_replace('#[0-9]#i', '', $_POST['inputCost']);
  }

  ///////////////////////////////////////////////////////

  if (!empty($inputName) AND !empty($inputState) AND !empty($inputCost)){
  $sqlCommand = "SELECT * FROM hciproject WHERE school_name LIKE '%$inputName%' AND school_state LIKE '%$inputState%' AND school_cost < '$inputCost'";
  }
  elseif (!empty($inputName) AND !empty($inputState)){
  $sqlCommand = "SELECT * FROM hciproject WHERE school_name LIKE '%$inputName%' AND    school_state LIKE '%$inputState%'";
  }
  elseif (!empty($inputName) AND !empty($inputCost)){
  $sqlCommand = "SELECT * FROM hciproject WHERE school_name LIKE '%$inputName%' AND school_cost < '$inputCost'";
  }
  elseif (!empty($inputState) AND !empty($inputCost)){
  $sqlCommand = "SELECT * FROM hciproject WHERE school_state LIKE '%$inputState%' AND school_cost < '$inputCost'";
  }
  else{
  $searchOut .= "0 Results Found";
  }


  // Connect to DB
  include_once("database_connection.php"); 

  $query = mysql_query($sqlCommand) or die(mysql_error());
  $count = mysql_num_rows($query);

  ///////////////////////////////////////////////////////

此外,我将创建仅包含一个变量的 elseif 语句。

任何有关此问题的帮助将不胜感激。

最佳答案

试试这个:

 $inputName = preg_replace('#[^a-z 0-9?!]#i', '',& $_POST['inputName']);
 $inputState = preg_replace('#[^a-z 0-9?!]#i', '',& $_POST['inputState']);
 $inputCost = preg_replace('#[0-9]#i', '',& $_POST['inputCost']);

 $selectCondition = 1; 
 if($inputName) $selectCondition.= " and school_name LIKE '%$inputName%' ";
 if($inputState ) $selectCondition.= " and school_state  LIKE '%$inputState%' ";
 if($inputCost ) $selectCondition.= " and school_cost < $inputCos ";

重要:

 & $_POST['inputName'] is equal to (isset($_POST['inputName']) && $_POST['inputName'] != "")

关于php - 基于多个变量和条件构建动态 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23279552/

相关文章:

php - 如果在循环中使用 MySQLi 准备语句,我什么时候调用 bind_param?

javascript - 通过将 <select> 值与列值进行比较来过滤 HTML 表格(PHP、HTML、Javascript)

__import__ 和 import as 之间的 Python 区别

mysql - 输出所有结果?

python - 动态分配模块名称作为别名

java - JSON 读取内部数组

php - 代码点火器查询问题

php - 如何使用 SQLite 和 PHP 将图像保存到数据库?

php - <a href> 表单选项?动态Jquery

php - 提交按钮不提交