Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2011, 13:34   #1
silvestr
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 38
По умолчанию mysql_fetch_assoct(): supplied argument is not a valid MySQL result resource

есть вот такая функция:

PHP код:
function get_const_list()
{
    global 
$user;
    
    
$query db_query("SELECT const_name FROM {const} WHERE uid = :uid"
    array (
':uid' => $user->uid,))
    ->
fetchField();
    
    
$consts = array();
 
    while (
$result mysql_fetch_assoc($query))
    {
        
$consts[] = array($result->const_name);
    }    
    
    return 
$consts;

ее задача выбрать все значения поля const_name из таблицы с определенным uid:



и записать их в массив. затем этими значениями пользуется следующий код:

Код HTML:
<select name="delete_const">
      <option selected="selected" disabled="disabled">Список</option>

      <? foreach ($consts as $const): ?>
      <option><?=$const['const_name']?></option>
      <? endforeach ?>
</select>
Но возвращается ошибка: Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource в функции get_const_list()

что не так делаю?
silvestr вне форума Ответить с цитированием
Старый 04.04.2011, 13:57   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,158
По умолчанию

а ошибка говорит о том что запрос неверный.... ну и соответсвенно вернул в функцию недопустимое значение
...попробуйте вывесести mysql_error
ADSoft вне форума Ответить с цитированием
Старый 04.04.2011, 15:32   #3
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Покажите код функции db_query()
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 04.04.2011, 17:14   #4
silvestr
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 38
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
а ошибка говорит о том что запрос неверный.... ну и соответсвенно вернул в функцию недопустимое значение
...попробуйте вывесести mysql_error
переписал немного код, и понял ошибку. запросы, которыми пользуюсь уже возвращают значение поля. а я из значения пытался сделать ассоциативный массив.

PHP код:
function get_const_list()
{
    global 
$user;
    
    
$quantity db_query("SELECT COUNT(*) FROM {const} WHERE uid = :uid", array (':uid' => $user->uid,))->fetchField();
    
$query db_query("SELECT const_name FROM {const} WHERE uid = :uid", array (':uid' => $user->uid,))->fetchField();
    
    if (!
$query)
    {
        die(
db_error());
    }
    
    
$consts = array();
    
    for (
$i 1$i <= $quantity$i++)
    {
        
$consts[$i] = $query;
    }
        
    
var_dump ($consts);

теперь в массив $consts записывается ровно столько значений, сколько нужно (сколько записей в таблице, соответствующих заданным условиям), только дублируются значения первой найденной строчки.

array(5)
{
[1]=>string(3) "AAA"
[2]=>string(3) "AAA"
[3]=>string(3) "AAA"
[4]=>string(3) "AAA"
[5]=>string(3) "AAA"
}

как заставить скрипт "шагать" по таблице, перебирая строки?

UPD: вот еще раз таблица

Последний раз редактировалось silvestr; 04.04.2011 в 17:21.
silvestr вне форума Ответить с цитированием
Старый 04.04.2011, 18:12   #5
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Я не зря попросил код функции db_query()

Прочитайте внимательно что делает метод fetch_field() объекта MySQLi_Result
http://www.php.net/manual/en/mysqli-...etch-field.php
Ваш объект наследует MySQLi_Result? Или реализует его функционал?
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 04.04.2011, 18:45   #6
silvestr
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 38
По умолчанию

и еще переделал код :

PHP код:
function get_const_list()
{
    global 
$user;
    
    
$quantity db_query("SELECT COUNT(*) FROM {const} WHERE uid = :uid", array (':uid' => $user->uid,))->fetchField();
    
$query db_query("SELECT * FROM {const} WHERE uid = :uid", array (':uid' => $user->uid,));
    
    
$consts = array();
    
    foreach (
$query as $value)
    {
        
$consts[] = $value;
    }
        
    
var_dump ($consts);

теперь скрипт перебирает всю таблицу и записывает в многомерный массив:

Код HTML:
array(5) {
		[0]=>object(stdClass)#4 (3) {
			["const_id"]=>string(1) "1"
			["const_name"]=>string(3) "AAA"
			["uid"]=>string(1) "1"
		}
		[1]=>object(stdClass)#80 (3) {
			["const_id"]=>string(1) "2"
			["const_name"]=>string(3) "BBB"
			["uid"]=>string(1) "1"
		}
		[2]=>object(stdClass)#81 (3) {
			["const_id"]=>string(1) "3"
			["const_name"]=>string(3) "CCC"
			["uid"]=>string(1) "1"
		}
		[3]=>object(stdClass)#74 (3) {
			["const_id"]=>string(1) "4"
			["const_name"]=>string(3) "DDD"
			["uid"]=>string(1) "1"
		}
		[4]=>object(stdClass)#100 (3) {
			["const_id"]=>string(1) "5"
			["const_name"]=>string(3) "EEE"
			["uid"]=>string(1) "1"
		}
}
остается вопрос, как достать оттуда все значения const_name

Цитата:
Сообщение от Johnatan Посмотреть сообщение
Я не зря попросил код функции db_query()

Прочитайте внимательно что делает метод fetch_field() объекта MySQLi_Result
http://www.php.net/manual/en/mysqli-...etch-field.php
Ваш объект наследует MySQLi_Result? Или реализует его функционал?
пытаюсь победить EntityFieldQuery, с ООП только начал знакомиться и, мягко говоря, еще тону в нем с головой.

Последний раз редактировалось silvestr; 04.04.2011 в 18:51.
silvestr вне форума Ответить с цитированием
Старый 04.04.2011, 19:10   #7
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Цитата:
Сообщение от silvestr Посмотреть сообщение
с ООП только начал знакомиться и, мягко говоря, еще тону в нем с головой.
Это как студент-физик, который только начал изучать физику и сразу полез делать свои навороты к атомному реактору АЭС. А что, он же физик.
Добро пожаловать в Друпал.

Строка $quantity = .... вам не нужна. Лишний код.

А вот следующую строку сделайте так.
PHP код:
$consts db_query("SELECT const_name FROM {const} WHERE uid = :uid", array (':uid' => $user->uid))->fetchCol(); 
Больше ничего не нужно, никаких foreach. Массив $consts будет содержать все значения const_name
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 04.04.2011, 20:00   #8
silvestr
Пользователь
 
Регистрация: 04.04.2011
Сообщений: 38
По умолчанию

получается просто песня! спасибо!

единственное, я не нашел описания этого метода у EntityFieldQuery.

по сокращенному называнию метода понятно, что идет выборка по колонке.

тяжело осваивать API на английском.

UPD: целый день перебирал мануалы и статьи по теме, голова уже квадратная, а как все оказалось просто %)

Последний раз редактировалось silvestr; 04.04.2011 в 20:02.
silvestr вне форума Ответить с цитированием
Старый 04.04.2011, 21:32   #9
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Смотри API друпала. Функция db_query на выходе даёт объект унаследованный от DatabaseStatementInterface
Это объект ядра Друпал 7.
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Warning: Invalid argument supplied for foreach() marius PHP 2 18.02.2011 15:05
field required but not supplied - firebird Greek9000 БД в Delphi 3 20.10.2010 14:32
в чём причина ошибки - mysql_num_rows(): supplied argument is not a valid vedro-compota PHP 6 23.09.2010 16:12
mysql_free_result(): supplied argument is not a valid MySQL result resource in lbkzhf SQL, базы данных 1 30.07.2010 16:46
Выдаёт ошибку!"Warning: mysql_result() [function.mysql-result" djsliva PHP 2 24.01.2010 15:27