从数组和变量过滤时PHP mysql查询问题

标签 php html mysql

在我的网页(html、php)上,我试图让用户可以选择多个复选框,每个复选框有效地过滤用户看到的结果。根据不同列中的值从数据库 (MySQL) 中提取信息。如下所示,一列是Joint_1,另一列是Position。

适用于过滤的有效代码(非常静态,显然不实用)是这样的:

$sql = "SELECT * FROM `Table_Name` WHERE (Joint_1=\'region1\'  OR  
                                          Joint_1=\'region2\'  OR  
                                          Joint_1=\'region3\' OR
                                          Joint_1=\'region4\') AND
                                         (Position=\'position1\' OR
                                          Position=\'position2\' OR
                                          Position=\'position3\')";
$result = $conn->query($sql);

if($result->num_rows > 0) {
   while($row = $result->fetch_assoc()) {
      echo $row["Common_Name1"] . "<br>";
   }
} else {
  echo "0 results";
  }

下面的代码是对上面代码的尝试,但是使用了数组,这不起作用。

$regions = 
array('region1', 'region2', 'region3', 'region4');
$position = array('position1', 'position2', 'position3');

$sql = "SELECT * FROM `Table_Name` WHERE (Joint_1=\'. $regions[0] .\'  OR  
                                          Joint_1=\'. $regions[1] .\'  OR  
                                          Joint_1=\'. $regions[2] .\' OR
                                          Joint_1=\'. $regions[3] .\') AND
                                         (Position=\'. $position[0] .\' OR
                          Position=\'. $position[0] .\' OR
                      Position=\'. $position[0] .\')"; 

以上代码提供“0 个结果”的结果。

我已经尝试多次执行此操作,下面还包含其他非功能代码(下面尝试仅基于 1 列进行过滤,因为我显然没有掌握基于 2 列进行过滤的代码)。

$sqlregion = array();
foreach ($_POST['region'] as $reg) {
   $sqlreg[] = "'" . mysql_real_escape_string($reg) . "'";   
}
$sql = "SELECT * FROM 'Exercises' WHERE Joint_1 IN (" . implode(",", 
$sqlreg) . ");";

$result=$conn->query($sql);

if($result->num_rows > 0) {
   while($row = $result->fetch_assoc()) {
     echo $row["Common_Name1"] . "<br>";
   } 
}

感谢任何帮助!谢谢。

最佳答案

您可以从数组构造此查询,您可以使用mysql中的IN子句指定多个OR

$regions = array('region1', 'region2', 'region3', 'region4');
$position = array('position1', 'position2', 'position3');
$regions = implode(",", $regions); // Converts array to string with comma as a separator
$position = implode(",", $position);
$sql = "SELECT * FROM `Table_Name` WHERE Joint_1 IN ($regions) AND Position IN ($position)";
echo $sql;

这会给你一个像这样的查询

SELECT * FROM Table_Name WHERE Joint_1 IN (region1,region2,region3,region4) AND Position IN (position1,position2,position3)

添加您自己的 LIMIT GROUP BYORDER BY 参数以满足您的需求

关于从数组和变量过滤时PHP mysql查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47702164/

相关文章:

HTML 视频无法在移动设备上运行

javascript - 提交后刷新整个页面(Fancybox)

php - 无法从字符串中删除特定字符。 PHP

php - 在默认的 joomla 3.1.1 注册表中添加自定义字段

html - Github 页面未显示网站上的更改

javascript - 在 HTML 中嵌入 JavaScript 或将其保存在外部有哪些优点和缺点?

php - Mysql 没有使用我的索引

php - WooCommerce 产品在实际上没有缺货时显示 “Out of stock” 消息

php - 检查字符串是否包含数据库中的用户名以使消息变为绿色

php - 我如何删除此错误 : PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined