[英]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.