почему этот mysql-запрос не работает?

Пожалуйста, помогите мне в решении указанной проблемы:

Раздел кода:

$result = mysql_query("SELECT *, UNIX_TIMESTAMP(eventdate) AS eventdate, UNIX_TIMESTAMP(throughdate) AS throughdate FROM events ORDER BY eventdate where id='$_GET[id];'"); // the above query is not working 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("FY",$row['eventdate']); if ($lasteventmonth != $eventmonth) { print "<p style='font-size: 18px;'><b>$eventmonth</b></p>"; } $lasteventmonth = $eventmonth; showEvent($row); } } ?> ........................ ........................//other codes 

когда код оценивается следующим образом:

Предупреждение: mysql_num_rows (): предоставленный аргумент не является допустимым ресурсом результата MySQL в C: \ Users \ Fagun \ Desktop \ UsbWebserver \ Root \ mapcal \ mapcal.php в строке 122 Нет событий прямо сейчас. ++++++++

После вашего вызова в mysql_query используйте это:

 if (! $result) { echo mysql_errno() . ": " . mysql_error(). "\n"; } 

это точно скажет вам, почему MySQL не будет запускать ваш запрос.

is ID a String или int? В любом случае, я думаю, вы не должны включать конечную точку с запятой?

Попробуйте изменить его следующим образом: $ result = mysql_query ("SELECT *, UNIX_TIMESTAMP (eventdate) AS eventdate,
UNIX_TIMESTAMP (viadate) AS throughdate FROM events ORDER BY eventdate, где id = '$ _ GET [id]' ");

Я предполагаю, что это проблема с тем, как вы используете построение запроса и конкатенацию идентификатора. Попробуйте это вместо этого (обратите внимание, как ID конкатенирован):

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

Вам не нужно разбивать его на 2 части, но – это должно быть легче читать и понимать. Вы даже можете выполнить эхо-запрос перед запуском, чтобы увидеть, какой запрос действительно создается, и попробовать его вручную в своей базе данных.

Часть или die(mysql_error()) предоставит вам информацию о том, что является проблемой (если это не проблема с идентификатором).

Правильно укажите значения:

$_GET[id] должен быть $_GET['id']

Попробуйте ниже:

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

Попробуй это:

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

Я предполагаю, что id не поступает с пользовательского ввода. Если это так, это уязвимо для атаки SQL-инъекций.

пытаться:

 $result = mysql_query("SELECT *, UNIX_TIMESTAMP(eventdate) AS eventdate, UNIX_TIMESTAMP(throughdate) AS throughdate FROM events ORDER BY eventdate where id= '" . intval($_GET['id']) . "'"); if($result) { //Do code } 

используйте intval (), чтобы убедиться, что $_GET['id'] является целым числом.
используйте оператор if, чтобы убедиться, что запрос выполнен правильно.

Попробуй это

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