为什么没有正确评估mysql查询?

时间:2012-04-22 09:50:49

标签: php 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']在页面中回显,则显示该值。

2 个答案:

答案 0 :(得分:1)

开始时id中的id='$_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);

如果仍然遇到问题,请在查询运行之前使用echo检查变量$ id和$ result;那么你就会清楚地知道它为什么没有运行你期望的查询。

答案 1 :(得分:-3)

我确信id=$_GET[id]正在检查一个int与一个int,在那里你检查一个int与一个字符串。删除$_GET['id']周围的单引号,然后重试。单引号将其定义为字符串而不是int。