2

私はここ数年 PHP/SQL を書いていませんでしたが、プロジェクトのためにこれを行う必要がありました。そして今、私は問題に遭遇しました。

特定の日付の間に、MySQL データベースからいくつかのデータを取得したいと考えています。次のように記述すれば問題なく動作します。

$result = mysql_query("SELECT * FROM acw WHERE team = '".$team."' and added between '2012-11-05' and '2012-11-10' ");

しかし、URLから日付を取得したいので、次のように書きました:

$periods = $_GET["per"];

if ( $periods == 1 ) {
$period = "and added between '2012-11-05' and '2012-11-10'";
} 
elseif ( $periods == 2 ) {
$period = "and added between '2012-11-11' and '2012-11-17'";
} 
elseif ( $periods == 3 ) {
$period = "and added between '2012-11-05' and '2012-11-10'";
} 

echo $period;

$period をエコーすると、HTML で正しい出力が得られますが、それを MySQL の質問に挿入しようとすると、何も得られません。何が間違っていますか?

$result = mysql_query("SELECT * FROM acw WHERE team = '".$team."' '".$period."' ");

これには何か問題があり、自分で解決することはできません:(

4

1 に答える 1

6

の文字列$periodは、引用符で囲まれた文字列リテラルではなく、SQL の完全なチャンクです。したがって、それを囲む単一引用符を削除します。

$result = mysql_query("SELECT * FROM acw WHERE team = '". $team ."' " . $period);
//---------------No quotes here----------------------------------------^^^^^^^^^^

$team注:がユーザー入力に由来する場合、SQL インジェクションに対して適切にエスケープされていると仮定します。mysql_real_escape_string()

echo文字列を 'ing out して、常に SQL ステートメントをデバッグすることをお勧めします。次のような文字列を見ると、もう少し明白だったでしょう。

SELECT * FROM acw WHERE team = 'The Team' 'and added between '2012-11-05' and '2012-11-10''

最後のアドバイス - これがここに掲載されていないコードで既に行われている場合を除き、$_GET['per']使用する前に設定されていることを確認してください。

// Set $periods to the $_GET value or defualt to 1 if it isn't set (or whatever value)
$periods = isset($_GET["per"]) ? $_GET['per'] : 1;
于 2012-11-10T20:13:29.603 に答える