2012-04-22 17 views
-1

は、指定された問題についての私を助けてください:mysqlクエリが正しく評価されないのはなぜですか?

コードセクション:

$result = mysql_query("SELECT *, UNIX_TIMESTAMP(eventdate) AS eventdate,  
UNIX_TIMESTAMP(throughdate) AS throughdate FROM events where 
id='$_GET[id]' ORDER BY eventdate"); 

// the above query is not working 
if (! $result) { 
    echo mysql_errno() . ": " . mysql_error(). "\n"; 
} 



if (mysql_num_rows($result) == 0) { 
    print "<p>No events right now.</p>\n"; 
    } 
else { 

    $lasteventmonth = ''; 
    while ($row = mysql_fetch_array($result)) { 
     $eventmonth=""; 
     $eventmonth = date("F Y",$row['eventdate']); 

     if ($lasteventmonth != $eventmonth) { 
      print "<p style='font-size: 18px;'><b>$eventmonth</b></p>"; 
     } 
     $lasteventmonth = $eventmonth; 

     showEvent($row);  
     } 
    } 
    ?> 
........................ 
........................//other codes 

次のようにコードが評価され

: ないイベント今。

しかし、特定のIDがデータベースに存在し、$ _GET ['id']がページにエコーされると、その値が表示されます。

+5

私は小さな目でスパイしていて、大きなSQL [SQLインジェクションの脆弱性](http://bobby-tables.com/) – Quentin

+2

mysql_ *関数の使用をやめます。 php.net/php.internals/53799)。代わりに、mysqliまたはPDOを使用して変数をバインドします。 – DCoder

+3

あなたの前の質問にお皿のない人は助けましたか?また、あなたは(まだ?)エラーを取得していますか? http://stackoverflow.com/questions/10260854/why-this-mysql-query-is-not-working – Bono

答えて

-3

確かに、id=$_GET[id]は、intとintとを比較しています。一重引用符を取り除いて$_GET['id']を削除し、もう一度やり直してください。一重引用符は、それをintではなく文字列として定義します。

+0

*知識があることを確認する*。 –

+0

知識はトマトが果物であることを知っています。 – gimg1

+0

果物と違って –

1

idid='$_GET[id]'とはじまりですか?

クエリhttp:// ... ?id=123がある場合は、idを引用符で囲みます。言って、より良い、このような:

$id = mysql_real_escape_string($_GET['id']); // safe against SQL injection 

$sql = "SELECT *, UNIX_TIMESTAMP(eventdate) AS eventdate, UNIX_TIMESTAMP(throughdate) AS throughdate FROM events where id='$id' ORDER BY eventdate"; 

$result = mysql_query($sql); 

それでもトラブルを取得している場合は、変数$ IDを確認するために、エコーを使用してクエリが実行される前に$を引き起こします。なぜあなたはあなたが期待するクエリを実行していないのかをより明確に理解することができます。

+0

ご協力いただきありがとうございます。私の問題は終わった。それが助けられたら、 – rock

+1

答えを投票してください。それがサイトの仕組みです。 – boisvert

関連する問題