0

我在我认为应该是一些相当简单的 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 语句和其他引号中的引号等等。

4

3 回答 3

8

对于您的每个变量,请执行以下操作:

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

intavl() 调用会将 $_GET 值转换为整数(如果它还没有),这将保护您免受 SQL 注入安全问题的影响。如果您需要对字符串做类似的事情,请改用 mysql_escape_string() 之类的东西。

于 2012-06-08T19:50:47.353 回答
2

您可以为每个变量添加一个变量,例如:

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

对其他变量也这样做。

于 2012-06-08T19:52:08.133 回答
0

您可以在查询中直接使用 Scott 和 David show 等简写符号:

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

不过,您确实需要先清理变量,否则您很容易被 SQL 注入。

于 2012-06-08T19:54:54.497 回答