Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\410.php on line 20
Читал на других форумах - говорят ошибка связана с тем, что в mysql_query() не обрабатываются возможные ошибки... Но конкртного решения нигде не нашел. Только-только начал изучать PHP, поэтому прошу - конкретный ответ.
Вот часть кода, с которой связана ошибка.
$result = mysql_query("select * from students where group = '{$dano}'");
while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
printf("здесь что-то выводится");}
Спустя 5 минут, 16 секунд (4.06.2011 - 17:36) m4a1fox написал(а):
lovetolaugh
mysql_fetch_assoc а не mysql_fetch_array это во первых
mysql_fetch_assoc а не mysql_fetch_array это во первых
Спустя 1 минута, 43 секунды (4.06.2011 - 17:37) m4a1fox написал(а):
И откуда вот это MYSQL_BOTH?
Спустя 44 секунды (4.06.2011 - 17:38) lovetolaugh написал(а):
m4a1fox
Это было написано в примере.
Это было написано в примере.
Спустя 29 секунд (4.06.2011 - 17:39) alex12060 написал(а):
Спустя 30 секунд (4.06.2011 - 17:39) m4a1fox написал(а):
lovetolaugh
Попробуй без него!
Попробуй без него!
Спустя 59 секунд (4.06.2011 - 17:40) m4a1fox написал(а):
alex12060
Ага круто.... Будем массив вынимать вместо строк.
Ага круто.... Будем массив вынимать вместо строк.
Спустя 59 секунд (4.06.2011 - 17:41) alex12060 написал(а):
lovetolaugh
$result = mysql_query("select * from students where group = '".mysql_real_escape_string($dano)."'") or die(mysql_error());
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
print('Here is print <br />');
}
Спустя 21 секунда (4.06.2011 - 17:41) lovetolaugh написал(а):
m4a1fox
Пробовал - толку ноль. Самое противное - что ведь пример который у меня есть работает - и написано тоже самое!
Пробовал - толку ноль. Самое противное - что ведь пример который у меня есть работает - и написано тоже самое!
Спустя 16 секунд (4.06.2011 - 17:42) Игорь_Vasinsky написал(а):
m4a1fox
всё у него верно, просто запрос ни чего не вернул, нужно сначала проверить если отдача из бд, я бы так сделал
mysql_fetch_array($result, MYSQL_BOTH);
всё у него верно, просто запрос ни чего не вернул, нужно сначала проверить если отдача из бд, я бы так сделал
error_reporting(E_ALL);
$result = mysql_query("select * from `students` WHERE `group` = '".$dano."'") or die(mysql_error());
if(mysql_num_rows($result))
{
//аргумент я бы опустил
while ($row = mysql_fetch_array($result))
{
printf("здесь что-то выводится");
}
}
else
echo "Здесь пусто";
Спустя 41 секунда (4.06.2011 - 17:42) alex12060 написал(а):
m4a1fox
Цитата |
Будем массив вынимать вместо строк |
Это как понимать? Здесь что-то криминальное?
Спустя 1 минута, 45 секунд (4.06.2011 - 17:44) lovetolaugh написал(а):
alex12060
Спасибо за ответ. Однако ж если пробовать твой вариант возникает такая ошибка, которая портит всю малину:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group = 'П-408'' at line 1
P.S. П-408 - это группа, которую я ввожу в браузере//
Спасибо за ответ. Однако ж если пробовать твой вариант возникает такая ошибка, которая портит всю малину:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'group = 'П-408'' at line 1
P.S. П-408 - это группа, которую я ввожу в браузере//
Спустя 3 минуты, 5 секунд (4.06.2011 - 17:47) m4a1fox написал(а):
alex12060
Цитата |
Прежде чем использовать функцию, стоит заглянуть в мануал, а не копипастить из первого попавшего источника. Дело в том, что функция mysql_fetch_array() возвращает два массива. Нумерованный и ассоциативный. А используется только один. Для чего брать в одну руку ложку, а в другую вилку, если мы собираемся есть суп? Если уж использовать её, то с подобающим флагом (MYSQL_ASSOC). А вообще тут уместнее mysql_fetch_assoc() |
Спустя 1 минута (4.06.2011 - 17:48) lovetolaugh написал(а):
Игорь_Vasinsky
Спасибо за пример - он 2 раза вывел "здесь что-то выводится". Все верно - в БД есть только 2 записи, которые удовлетворяют заданному условию (номер группы).
И что это значит? БД откликается?
Спасибо за пример - он 2 раза вывел "здесь что-то выводится". Все верно - в БД есть только 2 записи, которые удовлетворяют заданному условию (номер группы).
И что это значит? БД откликается?
Спустя 15 секунд (4.06.2011 - 17:48) alex12060 написал(а):
lovetolaugh
И теперь опиши мне, что изминилось и будет тебе счастье, и я буду счастлив)
$result = mysql_query("select * from `students` where `group` = '".mysql_real_escape_string($dano)."'") or die(mysql_error());
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
print('Here is print <br />');
}
И теперь опиши мне, что изминилось и будет тебе счастье, и я буду счастлив)
Спустя 1 минута, 5 секунд (4.06.2011 - 17:50) alex12060 написал(а):
m4a1fox
ДЯДЯ КОЛЯ СКАЗАЛ!!!
ДЯДЯ КОЛЯ СКАЗАЛ!!!
Цитата |
Если уж использовать её, то с подобающим флагом (MYSQL_ASSOC). А вообще тут уместнее mysql_fetch_assoc() |
Так а мы что и делаем?!
Эх ты, пирожок с капустой...
Спустя 1 минута, 11 секунд (4.06.2011 - 17:51) m4a1fox написал(а):
alex12060
А ты с картошкой!
А ты с картошкой!
Спустя 2 минуты, 13 секунд (4.06.2011 - 17:53) Игорь_Vasinsky написал(а):
Цитата |
И что это значит? БД откликается? |
совершенно верно - БД вернула результат
Спустя 1 минута, 29 секунд (4.06.2011 - 17:54) lovetolaugh написал(а):
alex12060
Она 2 раза вывела Here is print alex12060
Спасибо! Теперь все работает! Только сейчас мелкий вопрос еще задам по выводу...
Она 2 раза вывела Here is print alex12060
Спасибо! Теперь все работает! Только сейчас мелкий вопрос еще задам по выводу...
Спустя 4 минуты, 43 секунды (4.06.2011 - 17:59) lovetolaugh написал(а):
alex12060
В моем прошлом варианте в while мне необходимо было вывести из бд пару значений. Я это делал так:
Одкако ж в твоем варианте, когда я прописываю
Он выводит "ID: Name: ID: Name: ". Т.е. казалось бы правильно, но почему он не вставил вместо %s значения $row[] ...
В моем прошлом варианте в while мне необходимо было вывести из бд пару значений. Я это делал так:
while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
printf("ID: %s Name: %s", $row[0], $row[1]);
}
Одкако ж в твоем варианте, когда я прописываю
die(mysql_error());
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
printf("ID: %s Name: %s", $row[0], $row[1]);
}
Он выводит "ID: Name: ID: Name: ". Т.е. казалось бы правильно, но почему он не вставил вместо %s значения $row[] ...
Спустя 5 минут, 1 секунда (4.06.2011 - 18:04) inpost написал(а):
после выборки возвращается 2-х видов данные:
array -> $row[0], $row[1] , где цифра - порядок выборки.
и
assoc -> $row['name'],$row['val'] и т.д., где имя - это имя колонки, в которую были записаны данные.
Для того, чтобы не дублировать одни и те же данные, предлагают использовать assoc, но тогда ты уже не сможешь обращаться к ним как к $row[0],$row[1] !
И ещё, не используй printf
array -> $row[0], $row[1] , где цифра - порядок выборки.
и
assoc -> $row['name'],$row['val'] и т.д., где имя - это имя колонки, в которую были записаны данные.
Для того, чтобы не дублировать одни и те же данные, предлагают использовать assoc, но тогда ты уже не сможешь обращаться к ним как к $row[0],$row[1] !
И ещё, не используй printf
Спустя 3 минуты, 18 секунд (4.06.2011 - 18:07) alex12060 написал(а):
lovetolaugh
Давай я тебе объясню, ну и еще кое-кому
Смотри в чем здесь удивительная вещь состоит. Функция mysql_fetch_array как в математике, возводит число в квадрат. Что сие означает?
Функция mysql_fetch_array возвращает 2 массива, нумерованный и ассоциативный. Нумерованный массив, это когда ключи выглядят цифрами, а ассоциативный, это когда ключи выглядят как буквы.
Функция mysql_fetch_array может принимать 3 разных флага.
Я в своем примере поставил какой флаг? Если угадал, очень буду рад что пишу это не просто так.
Итак, как было выше сказано, чтобы не писать всю эту ерунду с флагами, используй функции-производные от этой (mysql_fetch_array)
Это функции:
Жирным я выделил ту функцию, которую предполагается использовать чаще всех остальных.
Если ты угадал, по какому принципу выстроен порядок функций-производных, то ты молодец, идешь к успеху.
Советиую почитать тебе мануал по этим функциям и по массивам.
На бис скажу следующее - не используй printf() для вывода строк, эта функция для этого не предназначена!
Удачи...
Давай я тебе объясню, ну и еще кое-кому
Смотри в чем здесь удивительная вещь состоит. Функция mysql_fetch_array как в математике, возводит число в квадрат. Что сие означает?
Функция mysql_fetch_array возвращает 2 массива, нумерованный и ассоциативный. Нумерованный массив, это когда ключи выглядят цифрами, а ассоциативный, это когда ключи выглядят как буквы.
Функция mysql_fetch_array может принимать 3 разных флага.
- MYSQL_BOTH (по умолчанию)
- MYSQL_NUM (нумерованный массив)
- MYSQL_ASSOC (ассоциативный массив)
Я в своем примере поставил какой флаг? Если угадал, очень буду рад что пишу это не просто так.
Итак, как было выше сказано, чтобы не писать всю эту ерунду с флагами, используй функции-производные от этой (mysql_fetch_array)
Это функции:
- mysql_fetch_assoc
- mysql_fetch_row
- mysql_fetch_object
Жирным я выделил ту функцию, которую предполагается использовать чаще всех остальных.
Если ты угадал, по какому принципу выстроен порядок функций-производных, то ты молодец, идешь к успеху.
Советиую почитать тебе мануал по этим функциям и по массивам.
На бис скажу следующее - не используй printf() для вывода строк, эта функция для этого не предназначена!
Удачи...
Спустя 1 минута, 51 секунда (4.06.2011 - 18:09) inpost написал(а):
alex12060
О, как, постарался! Я не читал, но оформленно красиво!
О, как, постарался! Я не читал, но оформленно красиво!
Спустя 3 минуты, 41 секунда (4.06.2011 - 18:13) lovetolaugh написал(а):
alex12060
Спасибо за подробное и, главное - доступное разъяснение. Теперь все более-менее ясно...
inpost
Благодарю - после того как заменил индексы выборки на имена - все стало выводить нормально.
Спасибо за подробное и, главное - доступное разъяснение. Теперь все более-менее ясно...
inpost
Благодарю - после того как заменил индексы выборки на имена - все стало выводить нормально.