Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > supplied argument is not valid MySQL result


Автор: kb64 8.2.2008, 14:56
Код


$db_day = $_POST['day'];
$db_m = $_POST['month'];
$db_year = $_POST['year'];
$sql = "SELECT sgn, s.sgn b.sal FROM sg, se AS s, bill AS b WHERE sgi = s.sgi AND s.s_id = b.s_id AND b.date = $db_year-$db_m-$db_day";
echo $sql;
$query_db = mysql_query($sql);
$row = mysql_fetch_array($query_db);



пишет "Warning mysql_fetch_array() supplied argument is not valid MySQL result"
также ругается на mysql_num_rows

помогите с выводом, я не понимаю,что я делаю неправильно.
П.С. запрос работает!.

Автор: solenko 8.2.2008, 15:02
Как он может работать без "="? 
Цитата

 AND b.date \"$

Вы когда проверяете запросы, длайте так:
Код

$sql = "SELECT service_group_name, s.service_name, b.ammount FROM service_group, service AS s, billing AS b WHERE service_group_id = s.service_group_id AND s.service_id = b.service_id AND b.date \"$db_year\"-\"$db_m\"-\"$db_day\";";
echo $sql;
mysql_query($sql);

Тогда будуту точно уверены что проверяете имеено то, что выполняется в скрипте.
Кстати, ";" в конце запроса лишняя.

Автор: drpain 8.2.2008, 15:04
Попробуй for заметь на while

Код

while($f = mysql_fetch_array($query_final))
{

}


помоему так....


Скорее всего у тебя один лишний запрос mysql_fetch_array когда $query_final уже закончился

Автор: skyboy 8.2.2008, 15:09
Цитата(kb64 @  8.2.2008,  13:56 Найти цитируемый пост)
запрос работает!.

не-а. запрос не работает.
раз mysql_query вернул "not valid MySQL result"(а это могло быть только false), значит, произошла ошибка.
либо нет подключения к БД.(mysql_connect был?)
либо не правильно выбрана БД(mysql_select_db вызывал?)
либо запрос неверен с точки зрения синтаксиса SQL(в частности, это может быть при "вроде работающем запросе", если в переменных PHP содержится кавычки; тогда в результате вставки переменных кавычки станут закрываться в "ненужном месте").
а знаешь, как проверить на ошибку? сравнить результат выполнения http://php.net/mysql_query с false; если там == 
false, то произошла ошибка.
а знаешь, как посмотреть сообщение об ошибке MySQL? Использовать функцию http://php.net/mysql_error(естественно, тогда, когда mysql_query вернул false; когда нет ошибки, бессмысленно использовать mysql_error)
а знаешь, как быстрее находить ответы? правильно задавать вопросы. у тебя проблема не с тем, что "не хочет выводиться", а с тем, что выполнение функции вызывает ошибку. определяешь, какая функция, потом - какая она принимает аргументы и какими эти аргуемнты могут быть согласно http://php.net/. Если не совпадает тип/значение аргументов - выясняешь, отчего аргументы имеют "неожиданные"(для тебя) значения.

Автор: drpain 8.2.2008, 15:15
Странно!!!

Если запрос не работает... почему тогда mysql_num_rows возвращает значение которое позволяет зайти в цикл????? и происходит вызов mysql_fetch_array

Автор: kb64 8.2.2008, 15:34
Подправил запрос, но проблема не решилась.

Автор: Golda 8.2.2008, 17:26
Цитата(kb64 @  8.2.2008,  15:34 Найти цитируемый пост)
Подправил запрос, но проблема не решилась. 


Эта фраза не содержит информации, которая могла бы помочь понять, в чем проблема, и помочь Вам решить ее. Что значит - проблема не решилась? Какие ошибки выдает скрипт? Советую перечитать рекомендации skyboy и, если проблема не решиться, вернуться сюда с большим количеством информации 

Автор: kb64 8.2.2008, 17:37
Код

$db_day = $_POST['day'];
$db_m = $_POST['month'];
$db_year = $_POST['year'];
$sql = "SELECT sgn, s.sgn b.sal FROM sg, se AS s, bill AS b WHERE sgi = s.sgi AND s.s_id = b.s_id AND b.date = $db_year-$db_m-$db_day";
echo $sql;
$query_db = mysql_query($sql);
$row = mysql_fetch_array($query_db);

ошибка такая же
Warning mysql_fetch_array() supplied argument is not valid MySQL result

с простым запрсом "SELECT * FROM table ...." не ругается, почему - это для меня загадка.

Автор: Golda 8.2.2008, 17:58
1. Что выводит echo $sql; ?
2. Измените предпосленюю строку следующим образом и напишите, что выводится

Код

$query_db = mysql_query($sql) || echo mysql_error();


Внимание! Этот вариант - для отладки, а не для использования в окончательном варианте скрипта


Автор: skyboy 8.2.2008, 21:40
Цитата(kb64 @  8.2.2008,  16:37 Найти цитируемый пост)
SELECT * FROM table

Внимание, вопрос! Ты что-нибудь про зарезервированные слова слышал?
нельзя использовать в запросе зарезервированные слова в качестве идентификаторов(table, create, where, from и кучу других). чтоб парсер не работал со строкой, как с зарезервированным словом, надо обрамлять их(идентификаторы, совпадающие с зарезервированными словами) обратными апострофами(на руссифицированной клаиватуре находится на одной кнопке вместе с "ё", но в английской раскладке). а чтоб точно не было проблем и в будущем(при дальнейшем расширении синтаксиса и, соотвественно, вводе новых зарезервированных слов) надо обрамлять обратными апострофами все имена полей и таблиц(включая псевдонимы полей и таблиц).
и обрати пристальнейшее внимание на mysql_error, про который мы с Golda только в этой теме уже два раза упомянули(воспользовался бы поиском, встретил бы с полтысячи ссылок на эту функцию).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)