Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

проблемы с функцией mysql_fetch_assoc() (Hornax)
Author Message
Hornax
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri Jan 06, 2006 2:13 pm (написано за 1 минуту 3 секунды)
   Post subject: проблемы с функцией mysql_fetch_assoc()
Reply with quote

При применении этой фунцкии (листинг 28.3) выдается ошибка:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in z:\home\localhost\www\reg.php on line 19
Все записанно корректно и правильно. В чем проблема?
Back to top
Andrey Gurin
Участник форума



Joined: 24 May 2005
Posts: 183
Карма: 20
   поощрить/наказать

Location: Italy

PostPosted: Mon Jan 09, 2006 3:41 pm (спустя 3 дня 1 час 28 минут; написано за 1 минуту 29 секунд)
   Post subject:
Reply with quote

А как выглядит запрос который Вы посылаете базе данных?
Back to top
View user's profile Send private message
Hornax
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Jan 11, 2006 12:43 pm (спустя 1 день 21 час 2 минуты; написано за 1 минуту 9 секунд)
   Post subject:
Reply with quote

require_once "mysql_connect_users.php";
$name=$_REQUEST['name'];
$r=mysql_query('SELECT * FROM Hornax ORDER BY name');
for($res=array();$row=mysql_fetch_assoc($r);$res[]=$row);
$res1=$res['name'];
print_r($res1);

таблица и база данных в наличие имеются, только вот ошибку функции генерирует... Файл mysql_connect_users полностью соответствует соответствующему (mysql_connect) из листинга.
Back to top
Andrey Gurin
Участник форума



Joined: 24 May 2005
Posts: 183
Карма: 20
   поощрить/наказать

Location: Italy

PostPosted: Wed Jan 11, 2006 2:09 pm (спустя 1 час 25 минут; написано за 1 минуту 3 секунды)
   Post subject:
Reply with quote

Code (php): скопировать код в буфер обмена
require_once "mysql_connect_users.php";

$name=$_REQUEST['name'];

$r=mysql_query (www.php.net/mysql_query)('SELECT * FROM Hornax ORDER BY name'); // ?
/* может, Вы хотите сделать так?
        $r=mysql_query("SELECT * FROM Hornax ORDER BY $name");
        Если должно быть так, то знайте что не очень хорошо брать что-то из $_REQUEST и без проверок засовывать это нечто в запрос к базе
*/

if (mysql_errno (www.php.net/mysql_errno)()) // Смотрим, какую ошибку выдает база
{
        die (www.php.net/die)(mysql_error (www.php.net/mysql_error)());
}

for($res=array (www.php.net/array)();$row=mysql_fetch_assoc (www.php.net/mysql_fetch_assoc)($r);$res[]=$row);
$res1=$res['name'];
print_r (www.php.net/print_r)($res1);
Back to top
View user's profile Send private message
Hornax
Guest





Карма: 388
   поощрить/наказать


PostPosted: Thu Jan 12, 2006 3:09 pm (спустя 1 день 59 минут; написано за 3 минуты 56 секунд)
   Post subject:
Reply with quote

Нет, все равно не идет. Выдается ошибка
Notice: Undefined index: name in z:\home\localhost\www\reg.php
Зато теперь только одна =) Спасибо огромное, про кавычки даже не подумал. Что касается получения из $_REQUEST, то это уже потом, сейчас надо чуть уловить, а потом проерки делать.

Как я понял, скрипт не находит нужную яйчейку. Но таблица есть, создавал ее скриптом
Code (php): скопировать код в буфер обмена
<?php
include_once "mysql_connect_users.php";
mysql_query (www.php.net/mysql_query)("CREATE TABLE Hornax (name TEXT, race TEXT,password TEXT,level INT)");
?>
пробовал с кавычками, как с одинарными, так и с двойными. Вроде должно все получиться было... Еще раз спасибо.
Back to top
Andrey Gurin
Участник форума



Joined: 24 May 2005
Posts: 183
Карма: 20
   поощрить/наказать

Location: Italy

PostPosted: Thu Jan 12, 2006 5:52 pm (спустя 2 часа 42 минуты; написано за 3 минуты 11 секунд)
   Post subject:
Reply with quote

Да не за что (-:
А по поводу Notice: Undefined index: name in z:\home\localhost\www\reg.php, то, скорее всего просто надо написать вместо $name=$_REQUEST['name'];
$name = isset($_REQUEST['name']) ? $_REQUEST['name'] : 'Имя столбца по умолчанию, например: name';
Back to top
View user's profile Send private message
Hornax
Заглянувший



Joined: 12 Jan 2006
Posts: 7
Карма: 0
   поощрить/наказать


PostPosted: Fri Jan 13, 2006 2:20 pm (спустя 20 часов 28 минут; написано за 3 минуты 32 секунды)
   Post subject:
Reply with quote

А почему не работает
Code (php): скопировать код в буфер обмена
<?php
include_once "mysql_connect_users.php";
mysql_query (www.php.net/mysql_query)("CREATE TABLE Hornax (name TEXT, race TEXT,password TEXT,level INT)");
?>
???
Там все без $_REQUEST сделано, а все равно нужное почему-то не создается.
Кроме того, переманная $name изпользовалась, чтобы таблицу создавать и читать из нее данные. Когда я указал напрямую имя таблицы, то необходимость в ней отпала (только в скрипте я ее не стал удалать).


P.S. А что вообще значит эта ошибка? Я англиийский знаю средне, вот как понял:
"Не идентифицирован индекс: 'name' там-то там-то"
Все равно - еще раз спасибо.
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Fri Jan 13, 2006 5:26 pm (спустя 3 часа 6 минут; написано за 58 секунд)
   Post subject:
Reply with quote

Hornax
Точнее, "Не определён индекс: name" - то есть в массиве не найдено ключа с таким именем.
Back to top
View user's profile Send private message
Hornax
Заглянувший



Joined: 12 Jan 2006
Posts: 7
Карма: 0
   поощрить/наказать


PostPosted: Fri Jan 13, 2006 5:34 pm (спустя 8 минут; написано за 2 минуты 2 секунды)
   Post subject:
Reply with quote

Но в БД такое поле должно быть, запускал же
Code (php): скопировать код в буфер обмена
<?php
include_once "mysql_connect_users.php";
mysql_query (www.php.net/mysql_query)("CREATE TABLE Hornax (name TEXT, race TEXT,password TEXT,level INT)");
?>
Возможно как-то криво создалось и стоит попробовать еще раз?

P.S. Сорри за несколько туповатые вопросы, только начинаю в web-программирование входить, не всегда важные мелочи видно =)
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Fri Jan 13, 2006 5:47 pm (спустя 13 минут; написано за 58 секунд)
   Post subject:
Reply with quote

Hornax
В БД такое поле может и было, а вот в $_REQUEST - не было. Смотрите внимательнее. Об ошибке рапортует PHP, а не MySQL
Back to top
View user's profile Send private message
Hornax
Заглянувший



Joined: 12 Jan 2006
Posts: 7
Карма: 0
   поощрить/наказать


PostPosted: Fri Jan 13, 2006 6:56 pm (спустя 1 час 8 минут; написано за 9 минут 10 секунд)
   Post subject:
Reply with quote

Не совсем ясно, поробую по пунктам:

1. Сначала выдавалась ошибка функции mysql_fetch_assoc. Поменял кавычки - проблема отпала.
2. Теперь выдается ошбика, что в $res нету ключа 'name'.
3. Ключ 'name' не может существовать по причине
   а)В БД нет такого поля (вариант отпадает, т.к. ошибку генерирует php, а не my_sql)
   б)Функция mysql_fetch_assoc не создала элемента массива $res['name'] (вернее очередное знаение $row не было
     равно паре ключ-значение name=>значение поля в БД.
   в)В $_REQUEST нет такого поля (вариант отпадает, если эта переменная не используется, видимо вас ввела в
     замешательство строка
Code (php): скопировать код в буфер обмена
$name=$_REQUEST['name'];
ее я записал здесь по оишбке, она была только в исходном варианте, когда имя таблицы бралось из поля)

Остается вариант б)? Что-то не так в работе функции или ее параметрах?
Back to top
View user's profile Send private message
Andrey Gurin
Участник форума



Joined: 24 May 2005
Posts: 183
Карма: 20
   поощрить/наказать

Location: Italy

PostPosted: Fri Jan 13, 2006 7:12 pm (спустя 15 минут; написано за 51 секунду)
   Post subject:
Reply with quote

Попробуйте нижеследующий код... Что имеем на выходе?
Code (php): скопировать код в буфер обмена
$hostname = 'localhost'; # Здесь крутится сервер бд
$username = 'root'; # Пользователь, то есть Вы
$password = ''; # Ваш пароль
$db = 'test'; # Имя базы данных (в mysql test обычно создается при инсталляции)

# Подключение к серверу бд
mysql_connect (www.php.net/mysql_connect)($hostname,$username,$password);
if (mysql_errno (www.php.net/mysql_errno)()) die (www.php.net/die)(mysql_error (www.php.net/mysql_error)());

# Создаем базу данных если ее еще нет
mysql_query (www.php.net/mysql_query)("CREATE DATABASE IF NOT EXISTS $db");
if (mysql_errno (www.php.net/mysql_errno)()) die (www.php.net/die)(mysql_error (www.php.net/mysql_error)());

# Подключаемся к базе
mysql_select_db (www.php.net/mysql_select_db)($db);
if (mysql_errno (www.php.net/mysql_errno)()) die (www.php.net/die)(mysql_error (www.php.net/mysql_error)());

# Создаем таблицу если ее еще нет
mysql_query (www.php.net/mysql_query)("CREATE TABLE IF NOT EXISTS hornax (name TEXT, race TEXT,password TEXT,level INT)");
if (mysql_errno (www.php.net/mysql_errno)()) die (www.php.net/die)(mysql_error (www.php.net/mysql_error)());

# Наполняем таблицу
mysql_query (www.php.net/mysql_query)("INSERT INTO hornax SET name='Vasya',race='human',password='Vasya',level=0");
if (mysql_errno (www.php.net/mysql_errno)()) die (www.php.net/die)(mysql_error (www.php.net/mysql_error)());

mysql_query (www.php.net/mysql_query)("INSERT INTO hornax SET name='Petya',race='elf',password='Petya',level=0");
if (mysql_errno (www.php.net/mysql_errno)()) die (www.php.net/die)(mysql_error (www.php.net/mysql_error)());

mysql_query (www.php.net/mysql_query)("INSERT INTO hornax SET name='Kolya',race='goblin',password='Kolya',level=0");
if (mysql_errno (www.php.net/mysql_errno)()) die (www.php.net/die)(mysql_error (www.php.net/mysql_error)());

# Выбираем из таблицы сортируя по полю 'name'
$resource = mysql_query (www.php.net/mysql_query)('SELECT * FROM hornax ORDER BY name');
if (mysql_errno (www.php.net/mysql_errno)()) die (www.php.net/die)(mysql_error (www.php.net/mysql_error)());

# Печатаем по очереди все записи
while ($record = mysql_fetch_assoc (www.php.net/mysql_fetch_assoc)($resource))
{
        print_r (www.php.net/print_r)($record);
}
Back to top
View user's profile Send private message
Миша Спларов
Участник форума



Joined: 17 Nov 2003
Posts: 821
Карма: 65
   поощрить/наказать

Location: Россия, Москва

PostPosted: Sat Jan 14, 2006 1:20 am (спустя 6 часов 7 минут; написано за 1 минуту 51 секунду)
   Post subject:
Reply with quote

Hornax, небольшой совет. Пишите при error_reporting(E_ALL) и при вызове любой mysql-функции пишите что-то типа mysql_query('MY QUERY') or die(mysql_error());
Это даст вам хотя бы базовую информацию о проблеме и позволит знать, что искать в гугле.
Back to top
View user's profile Send private message
GRAFzol
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Nov 28, 2006 7:24 pm (спустя 10 месяцев 14 дней 18 часов 3 минуты; написано за 2 минуты 59 секунд)
   Post subject:
Reply with quote

Тема я смотрю была давно уже исчерпана, но все же попробую спросить =)
У меня проблема с этой же функцией.
Code (php): скопировать код в буфер обмена
$result=mysql_query (www.php.net/mysql_query)("SELECT * FROM books ORDER BY Author");
for ($data=array (www.php.net/array)(); $row=mysql_fetch_array (www.php.net/mysql_fetch_array)($result); $data[]=$row);
$num_rows=mysql_num_rows (www.php.net/mysql_num_rows)($result);
Так вот в $result хранится результат выборки 23000 с лишним записей. В этом случае скрипт перестает работать на строчке с циклом for.
При 3000 точно работает.
Пробовал как php4 интерпретатором так и php5. Результат одинаков.
На моей машине работает, на другом хостинге работает. А вот на этом нет.
В чем проблема кто нибудь знает?
Back to top
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Tue Nov 28, 2006 9:03 pm (спустя 1 час 39 минут; написано за 17 секунд)
   Post subject:
Reply with quote

GRAFzol
memory_limit ?
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML