2013-08-22 3 views
1
SELECT Batch.NumStud 
FROM Batch 
WHERE CourseID='$courseid' 
INNER JOIN Course 
ON Batch.CourseID=Course.CourseID" 

ошибка, которая говорит mysql_fetch_array(): supplied argument is not a valid MySQL result resource in <b>F:\AppServ\www\anNoECourse.phpЧто не так с этой строкой SQL?

является shown.This код был написан, чтобы кормить в данных на графике Google.

+1

Г-н Уотсон говорит: «Где и что происходит в неправильном порядке ...» (И серьезно отнесся к замечанию Энди Лестера, что инъекция SQL вредна) – ppeterka

+10

** Вы оставляете себя широко открытыми для атак SQL-инъекций. ** Пожалуйста, узнайте об использовании параметризованных запросов, желательно с модулем PDO, для защиты вашего веб-приложения. На http://bobby-tables.com/php есть примеры, чтобы вы начали. –

+2

Ошибка PHP говорит, что проблема не в SQL, а в PHP-коде. –

ответ

7

Вы помещаете SQL в неправильном порядке (JOIN и WHERE переключается):

SELECT Batch.NumStud 
    FROM Batch INNER JOIN Course 
      ON Batch.CourseID = Course.CourseID 
    WHERE Course.CourseID = '$courseid' 

Это кажется, что ваш запрос может быть упрощен (проверить данные):

select Batch.NumStud 
    from Batch 
    where Batch.CourseID = '$courseid' 
+0

Хотя это гарантирует, что он получает данные большую часть времени, его код по-прежнему будет работать, если база данных не будет достигнута, потому что он неправильно обрабатывает результат mysql_query (см. Мой ответ). Это также должно быть отмечено на видном месте! –

0

Я думаю, что ошибка немного сложнее. Из-за того, что ваш SQL недействителен, вы не получаете набор результатов. Ваш код PHP не обрабатывается корректно!

Итак, помимо исправления вашего SQL, как предлагали другие, обязательно обработайте случай, когда вы не получите никаких результатов или ваш запрос приведет к ошибке в вашем PHP-коде!

Вторая часть вашего решения выглядит следующим образом:

$result = mysql_query(...); 
if ($result) 
{ 
    while (...) 
     ... 
} 

Это гарантирует, что mysql_query фактически возвращается результирующий набором и не false, что он делает в случае возникновения ошибок (из-за ваш неправильный код SQL, но и в других случаях). Поэтому просто исправлять ваш SQL недостаточно, чтобы сделать ваш скрипт ошибкой.

Но снова не используйте функции mysql_....! Они устарели.

Смежные вопросы