我在我认为应该是一些相当简单的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 直接在查询中显示:
$Data = $wpdb->get_results("SELECT *
FROM database.table
WHERE sem.MonthNum >= ".(!isset($_GET['minMonth'])?'1':$_GET['minMonth'])."
AND...
不过,您确实需要先清理变量,否则您可能会很容易被注入 SQL。