簡體   English   中英

SQL 查詢不起作用,但在 PHPMyAdmin 中有效

[英]SQL query not working but works in PHPMyAdmin

我有一個 web 應用程序,我正在嘗試修改其中一個查詢。 該查詢獲取信息(從名為 voyage_list 的表中)並返回各種字段。

我想修改查詢,使其基於用戶應用的某些過濾器(將放置在 URL 中)。

我無法讓查詢在 web 應用程序中工作,但如果我復制查詢並直接在 PHPMyAdmin 中執行它,它工作正常。

$vesselFilter = $_GET['vesselFilter'];
$vesselArray = explode(',', $vesselFilter);

$arrayCount = count($vesselArray);
$sqlExtend = ' status = 1 AND';

foreach ($vesselArray as $value) {
 $i = $i + 1;
 $sqlExtend .= " vesselID = '$value'";

 if ($i < $arrayCount){
  $sqlExtend .= " OR";
 }
}

$newQuery = "SELECT * FROM voyage_list WHERE" . $sqlExtend;
echo $newQuery;

$query = $db->query($newQuery)->fetchAll();

我很欣賞上面的內容非常混亂,但這只是為了讓我可以嘗試弄清楚如何讓查詢工作。

任何幫助將不勝感激!

謝謝

該查詢可能不會返回您認為的結果。 AND優先於OR ,因此如果狀態為 1,它將返回列表中的第一個容器,以及列表中的任何其他容器,無論狀態如何。

您最好使用這樣的IN子句創建查詢:

SELECT * FROM voyage_list WHERE status = 1 AND vesselID IN(8,9,10)

這里有一些代碼可以做到這一點:

$vesselFilter = $_GET['vesselFilter'];


// Validate data. Since we're expecting a string containing only integers and commas, reject anything else
// This throws out bad data and also protects against SQL injection.
if (preg_match('/[^0-9,]/', $vesselFilter)) {
    echo "Bad data in input";
    exit;
}

// filter out any empty entries.
$vesselArray = array_filter(explode(',', $vesselFilter));


// Now create the WHERE clause using IN
$sqlExtend = 'status = 1 AND vesselID IN ('.join(',', $vesselArray).')';


$newQuery = "SELECT * FROM voyage_list WHERE " . $sqlExtend;
echo $newQuery;

$query = $db->query($newQuery)->fetchAll();
var_dump($query);

暫無
暫無

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

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