2012-06-08 45 views
0

我遇到了一些麻煩,我認爲應該是一些相當簡單的PHP。它在WordPress中運行,但問題不應該是WordPress的具體問題。 $ wpdb-> get_results()只是查詢WordPress數據庫而不必使用連接字符串的一種方法。我也使用了幾個$ _GET命令。基本的PHP - SQL查詢中的條件級聯

這是我到目前爲止有:

$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語法錯誤,我不知道所有的print語句和其他引號內的報價和諸如此類的東西。

+2

清理$ _GET變量! – Steve

+1

有人不怕SQL注入... –

回答

8

對於每一個變量都這樣做:

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

的intavl()調用將使$ _GET值轉換爲整數,如果它是沒有準備好,這將保護您免受SQL注入安全問題。如果你需要用字符串做類似的事情,可以使用類似mysql_escape_string()的東西。

+1

我們認爲一樣;) – David

+0

+1對你們來說 – Steve

2

你可以添加一個變量爲每個,例如:

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

只是這樣做對其他變量也是如此。

0

您可以在查詢中使用速記符號像斯科特和大衛直接顯示:

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

你真的需要清理第一變量,雖然,否則可能會注入SQL很容易。