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 が示すような短縮表記をクエリで直接使用できます。

$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 に答える