Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблемы с MySql (ф-ия mysql_fetch_array), сабж 
V
    Опции темы
capricorn
Дата 28.10.2007, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 22.10.2007

Репутация: нет
Всего: 1



есть такая ф-ия:

Код

function SQL_QUERY($query)
{
    $PublicSqlBase = mysql_connect('localhost', 'Lamer', 'Lamer')
                    or die($Mysql_connect_error);
        mysql_select_db('MyBase', $PublicSqlBase)
                    or die($Mysql_select_db_error);
    $retval = mysql_query($query, $PublicSqlBase);
    return $retval;
}


далее где-то в коде:

Код

$rslt = SQL_QUERY("SELECT * FROM Gallery THERE id=0");
$row = mysql_fetch_array($rslt);

print($row["img"]);


во здесь и проблема.
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in z:\home\test3\www\sql.php on line 14

но, если вызвать mysql_fetch_array с параметром, возвращаемым напрямую mysql_query, то всё ок.
(напр. такsmile

Код

$retval = mysql_query($query, $PublicSqlBase);
mysql_fetch_array($retval);


ЗЫ
это просто пример, я хочу узнать, почему так происходит....

Помогите!

Зарание спасибо!

Это сообщение отредактировал(а) capricorn - 28.10.2007, 12:39
PM MAIL   Вверх
skyboy
Дата 28.10.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



давай посмотрим на твой код:
Код

 $PublicSqlBase = mysql_connect('localhost', 'Lamer', 'Lamer')
                    or die($Mysql_connect_error);

Если ошибка соеднения - то выдаем текст ошибки.
Код

 mysql_select_db('MyBase', $PublicSqlBase)
                    or die($Mysql_select_db_error);

Если не получилось выбрать базу - выдаем ошибку.
Код

 $retval = mysql_query($query, $PublicSqlBase);

Если запрос не был выполнен из-за ошибки, то... тупо игнорируем? 
скорее всего, твой запрос просто вызывает ошибку. Ну, мало ли, кавычки не закрыл, или прав на выполнение запросов нет... Но ошибки этой ты не видишь... Вот, вариант.
PM MAIL   Вверх
capricorn
Дата 28.10.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 22.10.2007

Репутация: нет
Всего: 1



да нет же. вопрос понят неправильно.

mysql_query($query, $PublicSqlBase); - возвращает мне результат запроса,
а вот МОЯ ФУНКЦИЯ (function SQL_QUERY($query)) - этот самый результат возвращает неверно =(
посему mysql_fetch_array и ругается.

но вот если оформить ф-ию так, то всё пойдёт нормально:

Код

function SQL_QUERY($query)
{
    $PublicSqlBase = mysql_connect('localhost', 'Lamer', 'Lamer')
                    or die($Mysql_connect_error);
        mysql_select_db('MyBase', $PublicSqlBase)
                    or die($Mysql_select_db_error);
    $retval = mysql_query($query, $PublicSqlBase);

    $row = mysql_fetch_array($retval); // вот теперь mysql_fetch_array не ругаеццо

    print($row["img"]);
}


просекаешь в чём суть?

вот я и не поймю почему моя ф-ия возвращает "кривой" результат.
А может дело в реализации ПХП, или надо сначала как-то обработать этот результат, хз... :(

Это сообщение отредактировал(а) capricorn - 28.10.2007, 16:52
PM MAIL   Вверх
HotHead
Дата 28.10.2007, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 26.10.2007

Репутация: нет
Всего: 4



capricorn, я бы первым делом попробовал написать "SELECT * FROM Gallery WHERE id=0". Или этот глюк только на форуме? Иначе всё должно работать.
PM MAIL   Вверх
capricorn
Дата 28.10.2007, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 22.10.2007

Репутация: нет
Всего: 1



это я когда на форум код переносил - опечятку сделал smile

а решение найдено (в переустановке сервера (т.е. апача, и мускл/пхп вместе с ним) %)). тема закрыта, всем спасибо!
PM MAIL   Вверх
skyboy
Дата 28.10.2007, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(capricorn @  28.10.2007,  15:51 Найти цитируемый пост)
а вот МОЯ ФУНКЦИЯ (function SQL_QUERY($query)) - этот самый результат возвращает неверно =(

...а твоя функция возвращает то, что возвращает mysql_query внутри, верно? а mysql_query возвращает либо идентификатор выполненного запроса(что без проблем парсится при помощи mysql_fetch_array/mysql_fetch_row), либо возвращает false в случае ошибки, парсинг которого(значения false) пориведет к сообщению 
Цитата

supplied argument is not a valid MySQL result resource

Естественно, так как у тебя не было проверки в твоей функции, то ты не мог определить, что причина в запросе. Твоя функция возвращала false, а ты искал причины в РНР-коде своей функции, а не в запросе или настройках сервера. Не самый лучший подход - игнорировать ошибки. Так как соединение и указание БД происходили(иначе ты бы видел сообщения - эти-то ошибки у тебя обрабатываются), запрос мог не выполнится из-за превышения максимального количества выполняемых запросов(видать, были у тебя глючные запросы, выполнение которых повисло, не завершившись) или подключений. echo mysql_error() тебе бы это показало. Если бы ты захотел.
P.S. Меня ещё и удивляет, что ты под каждый запрос заново коннектишься к БД. Получается ты(потенциально) теряешь время и(совсем наверняка) быстренько расходуешь лимит доступных подключений. Вот если у тебя за время работы 10 запросов, значит у тебя создастся 10(!) подключений, которые завершатся только при окончании работы скрипта. Почему бы не подключаться один разх в начале работы?
PM MAIL   Вверх
NiCketT
  Дата 29.10.2007, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 10.9.2007

Репутация: нет
Всего: нет



Есть запрос
Код

SELECT name, city, country, year, level, score, public_date FROM ten_users, ten_records
WHERE ten_users.user_id = ten_records.user_id
ORDER BY score DESC, level DESC, play_time;

Пишу
Код

$query="SELECT name, city, country, year, level, score, public_date FROM ten_users, ten_records WHERE ten_users.user_id=ten_records.user_id ORDER BY score DESC, level DESC, play_time;";
$result=mysql_query($query);
$n=mysql_num_rows($resul);

а оно выдает ошибку
Код

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result 


В чем дело?!
Через phpMyAdmin работает нормально


Это сообщение отредактировал(а) NiCketT - 29.10.2007, 23:36
PM MAIL   Вверх
skyboy
Дата 30.10.2007, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(NiCketT @  29.10.2007,  22:34 Найти цитируемый пост)
$query="SELECT name, city, country, year, level, score, public_date FROM ten_users, ten_records WHERE ten_users.user_id=ten_records.user_id ORDER BY score DESC, level DESC, play_time;";
$result=mysql_query($query);
$n=mysql_num_rows($resul);

сделай так:
Код

$query="SELECT name, city, country, year, level, score, public_date FROM ten_users, ten_records WHERE ten_users.user_id=ten_records.user_id ORDER BY score DESC, level DESC, play_time;";
$result=mysql_query($query);
if($result === false)
 die(mysql_error());
else 
 $n=mysql_num_rows($resul);

что выдает?
PM MAIL   Вверх
NiCketT
  Дата 30.10.2007, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 10.9.2007

Репутация: нет
Всего: нет



skyboy
Сначала попрежнему выдает
Код

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/virtwww/w_nicket_cafc/http/show.php on line 143

затем, когда поставил вездле кавычки
Код

SELECT 'name', 'city', 'country', 'year', 'level', 'score', 'public_date' FROM 'ten_users', 'ten_records' WHERE 'ten_users'.'user_id' = 'ten_records'.'user_id' ORDER BY 'score' DESC, 'level' DESC, 'play_time';

(кстати, что эти кавычки означают?)
выдало вот-такое
Код

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 ''ten_users', 'ten_records' WHERE 'ten_users'.'user_id' = 'ten_records'.'user_id'' at line 1


Это сообщение отредактировал(а) NiCketT - 30.10.2007, 09:36
PM MAIL   Вверх
skyboy
Дата 30.10.2007, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 14
Всего: 260



Цитата(NiCketT @  29.10.2007,  23:42 Найти цитируемый пост)
Сначала попрежнему выдает

конечно. как же я сразу просмотрел?! ты же обращаешься к переменной $resul, а не $result!
Цитата
затем, когда поставил вездле кавычки

Прямые кавычки(в отличие от обратных "`", которые позволяют отличать имена полей/таблиц/БД от зарезервированных слов) как  и двойные кавычки " указывают на строковые константы. Т.е. ты свои запросом
Код

SELECT 'name', 'city', 'country', 'year', 'level', 'score', 'public_date' FROM 'ten_users', 'ten_records' WHERE 'ten_users'.'user_id' = 'ten_records'.'user_id' ORDER BY 'score' DESC, 'level' DESC, 'play_time'

ты пытаешься вытянуть 6 строковых констант('name', 'city', 'country', 'year', 'level', 'score' и  'public_date') не из таблицы, а из двух строковых констант('ten_users' и 'ten_records'), что есть неправильно и вызывает смуту и возражения сервера.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0994 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.