簡體   English   中英

從數組和變量過濾時,PHP mysql查詢問題

[英]PHP mysql query issue when filtering from array and variables

在我的網頁(html,php)上,我試圖讓用戶選擇多個復選框,每個復選框有效地過濾了用戶看到的結果。 根據不同列中的值從數據庫(MySQL)中提取信息。 如下所示,一列是Joint_1,另一列是Position。

WORKS用於過濾的有效代碼(非常靜態,顯然不實用)是這樣的:

$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參數以滿足您的需求

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM