Работа с базой данных v3.0

Тема в разделе "Программирование", создана пользователем SnowWind, 18.01.2013.

  1. Offline

    SnowWind Недавно здесь

    Регистрация:
    18.01.2013
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    Всем привет

    Хочу получить данные из базы данных но никак не пойму как это сделать

    Код (PHP):
    1. // Get a db connection.
    2. $db = JFactory::getDbo();
    3.  
    4. // Create a new query object.
    5. $query = $db->getQuery(true);
    6.  
    7.  
    8. $query->select('name');
    9. $query->from('q8abm_users');
    10. $query->where('username = Podopitniy');
    11.  
    12. // Reset the query using our newly populated query object.
    13. $db->getQuery($query);
    14.  
    15. // Load the results as a list of stdClass objects.
    16. $results = $db->loadResult();
    17.  
    18. print_r($results);

    на вывод получаю вот это - "1"

    и это вовсе не имя юзера :)
     
  2.  
  3. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 206
    Симпатии:
    334
    Пол:
    Мужской
    вместо:
    напиши
    Код (PHP):
    1. $query->where('username = \'Podopitniy\'');


    не забывай про экранирование

    и не обязательно писать префикс таблиц q8abm, попробуй напиши так:
    Код (PHP):
    1. $query->from('#__users');

    БД движок сам подставит чего и куда ему надо
     
  4. Offline

    SnowWind Недавно здесь

    Регистрация:
    18.01.2013
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    Код (PHP):
    1. $db = JFactory::getDbo();
    2. $query = $db->getQuery(true);
    3. $query->select('name');
    4. $query->from('#__users');
    5. $query->where('username=\'Podopitniy\'');
    6. $db->getQuery($query);
    7. $results = $db->loadResult();
    8.  
    9. print_r($results);


    всёравно на вывод получаю = "1"
    даже если в WHERE поставить id или любое другое значение, всёравно "1"
     
    Последнее редактирование: 19.01.2013
  5. Offline

    SnowWind Недавно здесь

    Регистрация:
    18.01.2013
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    в общем не получается никак с БД работать и нормальными методами php она режет фигня какая-то

    данные о пользователе получилось вот так вытянуть
    Код (PHP):
    1. $getuser =JFactory::getUser ();
    2. $user = $getuser->user;


    теперь нужно как-то туда записать
     
  6. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 206
    Симпатии:
    334
    Пол:
    Мужской
    я так понимаю что ты пытаешься создать запрос к БД при помощи встроенных функций по работе с БД из Joomla 3.x
    если всё таки хочешь использовать эти функции то получше поройся в структуре класса по работе с БД
    т.к. мне сдаётся что у тебя вообще есть лишние части и используются не нужные функции
    $db->getQuery(true);, что за TRUE ?
    и вообще getquery это для получения уже отправленного запроса или ещё не отправленного, т.е. ты можешь получить из класса введённый в него запрос, который был/небыл обработан

    раньше делалость так:
    1. создание экземпляра класса ($db = JFactory::getDbo();)
    2. написание самого запроса ($query='select name from #__users where username=\'Podopitniy\'';)
    3. передача запроса экземпляру класса ($db->setQuery($query);)
    4. обработка ($db->Query();)
    5. получение результата ($results = $db->loadResult();)

    возможно что в третей версии это всё изменилось, почитай документацию на Joomla.org, станет более понятно

    а если работать через экземпляр USER, то у него есть ещё и функция setUser
     
  7. Offline

    SnowWind Недавно здесь

    Регистрация:
    18.01.2013
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    вот отсюда и взял
    http://docs.joomla.org/Accessing_the_database_using_JDatabase/3.0
     
  8. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 206
    Симпатии:
    334
    Пол:
    Мужской
    а тогда почему у тебя фот это
    пропущено?

    вот тебе и выдаётся результат -1

    смотри полный скрипт:
    Код (PHP):
    1. // Get a db connection.
    2. $db = JFactory::getDbo();
    3.  
    4. // Create a new query object.
    5. $query = $db->getQuery(true);
    6.  
    7. // Select all records from the user profile table where key begins with "custom.".
    8. // Order it by the ordering field.
    9. $query->select(array('user_id', 'profile_key', 'profile_value', 'ordering'));
    10. $query->from('#__user_profiles');
    11. $query->where('profile_key LIKE \'custom.%\'');
    12. $query->order('ordering ASC');
    13.  
    14. // Reset the query using our newly populated query object.
    15. $db->setQuery($query);
    16.  
    17. // Load the results as a list of stdClass objects.
    18. $results = $db->loadObjectList();


    внимательно, внимательность и ещё раз ВНИМАТЕЛЬНОСТЬ ))))))))
     
    SnowWind нравится это.
  9. Offline

    SnowWind Недавно здесь

    Регистрация:
    18.01.2013
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    и точно!
    но по идее как то set выбрать get получить, ну да ладно
    сейчас запись в БД остаётся сделать :)
    точнее обновить, но в мануале нет инфы об этом
     
    Последнее редактирование: 19.01.2013
  10. Offline

    SnowWind Недавно здесь

    Регистрация:
    18.01.2013
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    собсно обновление не сильно отличается

    Код (PHP):
    1. $query = $db->getQuery(true);
    2. $query->update('#__users');
    3. $query->set('name = \'i cool!\'');
    4. $query->where('username=\'Podopitniy\'');
    5. $db->setQuery($query);
    6. $results = $db->loadResult();
    7.  
    8. print_r($results);


    опытным путём вывел, в базу добавляет норм, но проблема в выпадающих ошибках

    Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given in Z:\home\site.ru\www\libraries\joomla\database\driver\mysqli.php on line 662

    Warning: mysqli_free_result() expects parameter 1 to be mysqli_result, boolean given in Z:\home\site.ru\www\libraries\joomla\database\driver\mysqli.php on line 705

    нашёл эти файлы и вот эти строки соответственно:

    Код (PHP):
    1. return mysqli_fetch_row($cursor ? $cursor : $this->cursor);
    2.  
    3. mysqli_free_result($cursor ? $cursor : $this->cursor);


    или просто ошибки заглушить?
     
    Последнее редактирование: 19.01.2013
  11. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 206
    Симпатии:
    334
    Пол:
    Мужской
    ты разберись почему у тебя в обоих функциях ожидается первый параметр
     
  12. Offline

    SnowWind Недавно здесь

    Регистрация:
    18.01.2013
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    новая проблема, а как в поле вставить переменную???
    вместо
    Код (PHP):
    1. $query->where('username = \'Podopitniy\'');

    нужно
    Код (PHP):
    1. $query->where('username = $user');
    но так не работает

    в $user данные попадают так

    Код (PHP):
    1. $getuser = JFactory::getUser();


    ну и что бы модифицировать под запрос я сделал так

    Код (PHP):
    1. $user = $getuser->name; echo $user; $user = "\'".$user."\'"; echo $user;


    на экран выводит с кавычками и слэшем зн. и сюда where('username = $user') должен встать нормально
     
    Последнее редактирование: 20.01.2013
  13. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 206
    Симпатии:
    334
    Пол:
    Мужской
    так же как ты склеиваешь строки
    Код (PHP):
    1. $query->where('username = \''.$user.'\'');


    а вообще то у класса по работе с БД должна быть функция Escape, вроде как она производит экранмрование
    Код (PHP):
    1. $query->where(escape('username = '.$user));

    вот только я не знаю откуда она вызывается
    скорее всего
    Код (PHP):
    1. $query->where($query->escape('username = '.$user));
    в данном случае будет
     
  14. Offline

    SnowWind Недавно здесь

    Регистрация:
    18.01.2013
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    и точно сработало
    Код (PHP):
    1. $query->where('username = \''.$user.'\'');

    я уже всякоразно испробовал но не так )))
    но вот чё-то я ничего не понял зачем столько кавычек? вообще запутался что какие открывают и почему нет конфликта
     
    Последнее редактирование: 20.01.2013

Поделиться этой страницей

Загрузка...