簡體   English   中英

基本PHP-SQL查詢中的條件串聯

[英]Basic PHP - Conditional Concatenation Within SQL Query

我覺得應該是一些相當簡單的PHP遇到了麻煩。 它在WordPress內部運行,但問題不應該是WordPress特定的。 $ wpdb-> get_results()只是查詢WordPress數據庫的一種方式,而不必使用連接字符串。 我還使用了幾個$ _GET命令。

這是我到目前為止的內容:

$Data = $wpdb->get_results("SELECT *
    FROM database.table
    WHERE sem.MonthNum >= " .$_GET["minMonth"]. "
    AND sem.MonthNum <= " .$_GET["maxMonth"]. "
    AND sem.Year  >= " .$_GET["minYear"]. "
    AND sem.Year <= " .$_GET["maxYear"]. ");

只要填充$ _GET,此方法就起作用。 我想添加一種默認值,例如,如果$ _GET為空,則設置一個數字,如果不為空,它將獲取該數字。 類似於...

$Data = $wpdb->get_results("SELECT *
    FROM database.table
    WHERE sem.MonthNum >= " if(!$_GET){echo 1;} else {echo ".$_GET[\"minMonth\"]. "} "

但這對我不起作用...可能是一些愚蠢的PHP語法錯誤,我不確定所有的echo語句以及其他引號內的引號和其他內容。

對於每個變量,請執行以下操作:

$minMonth = isset($_GET["minMonth"]) ? intval($_GET["minMonth"]) : 1;
... 
"WHERE sem.MonthNum >= " .minMonth. "

intavl()調用會將$ _GET值轉換為整數(如果尚未轉換),這將保護您免受SQL注入安全性問題的影響。 如果您需要對字符串做類似的事情,請改用mysql_escape_string()之類的東西。

您可以為每個變量添加一個變量,例如:

// If not set $minMonth is set to 1
$minMonth = (isset($_GET['minMonth']) ? $_GET['minMonth'] : 1);

只需對其他變量也是如此。

您可以在查詢中直接使用Scott和David show這樣的簡寫形式:

$Data = $wpdb->get_results("SELECT *
FROM database.table
WHERE sem.MonthNum >= ".(!isset($_GET['minMonth'])?'1':$_GET['minMonth'])."
AND...

不過,您確實確實需要先清理變量,否則可以很容易地將SQL注入。

暫無
暫無

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

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