За последние 24 часа нас посетили 22907 программистов и 1272 робота. Сейчас ищут 770 программистов ...

Подключение к базе данных ООП

Тема в разделе "PHP для новичков", создана пользователем Legolazik, 24 июн 2016.

  1. Legolazik

    Legolazik Новичок

    С нами с:
    24 июн 2016
    Сообщения:
    8
    Симпатии:
    0
    Здравствуйте, дорогие товарищи. Застрял в самом начале изучения ООП....
    Проще говоря, мне надо это:

    PHP:
    1. $mysqli = new mysqli
    2. (
    3.     "localhost",
    4.         "u400340209_fesfd",
    5.         "mU3cnJd7t8",
    6.         "u400340209_sulib"
    7. )
    8.  
    9.  
    10.  
    11. $result = $mysqli->query(SELECT * FROM books");
    12. $rows = $result->fetch_assoc();
    Разбить и поместить в два класса

    Чтобы получилось примерно так, но при этом еще и работало (выводились из базы все записи)

    PHP:
    1. class DB_CONFIG
    2. {
    3.    public $mysqli;
    4.  
    5.     function connectDataBase ()
    6.    {
    7.         $this->mysqli = new mysqli
    8.         (
    9.         "localhost",
    10.         "xxxxxxxxx",
    11.         "xxxxxxxxx",
    12.         "xxxxxxxxx"
    13.         );//подключение к базе данных
    14.    
    15.     }
    16. }
    17.  
    18. class Books extends DB_CONFIG
    19. {
    20.    public $result;
    21.    public $rows;
    22.  
    23.    public function selectBooks ()
    24.         {
    25.        $this->result = $this->mysqli->query("SELECT * FROM books WHERE id<11");
    26.        $this->rows = $this->result->fetch_assoc();
    27.         }
    28. }
    Подскажите, как это сделать?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    а не надо так делать. это нарушает идеологию ооп
     
  3. Legolazik

    Legolazik Новичок

    С нами с:
    24 июн 2016
    Сообщения:
    8
    Симпатии:
    0
    А как это правильно делать в ооп? Без классов?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Нет. Без наследования книжек от коннекта к базе.
    --- Добавлено ---
    Ты можешь в конструктор класса книжек передавать объект подключения к субд, записывать его в приватное свойство и там дёргать для запросов.
     
    mahmuzar нравится это.
  5. Legolazik

    Legolazik Новичок

    С нами с:
    24 июн 2016
    Сообщения:
    8
    Симпатии:
    0
    Понял, а как это сделать? Направьте меня на верный путь:)
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    что-то типа
    PHP:
    1. class Books
    2. {
    3. private $mysqli;
    4.  
    5. public function __construct(\mysqli $mysqli)
    6. {
    7.     $this->mysqli = $mysqli;
    8. }
    9.  
    10. public function otherMethod ()
    11. {
    12.     $this->mysqli->query("SELECT 1");
    13. }
    14. }
    15.  
    16. $mysqli = new DB_CONFIG();
    17. $books = new Books($mysqli);
    направляю тему в раздел новичков. Добро пожаловать!
     
  7. Legolazik

    Legolazik Новичок

    С нами с:
    24 июн 2016
    Сообщения:
    8
    Симпатии:
    0
    Спасибо большое, очень помогли!
     
  8. Legolazik

    Legolazik Новичок

    С нами с:
    24 июн 2016
    Сообщения:
    8
    Симпатии:
    0
    Здравствуйте, это снова я!

    Что на этот раз я делаю не так?

    PHP:
    1. <?php
    2.  
    3.  
    4. class DB_CONFIG
    5. {
    6.    public $mysqli;
    7.  
    8.     function connectDataBase ()
    9.    {
    10.         $this->mysqli = new mysqli
    11.         (
    12.         "xxxxx",
    13.         "xxxxx",
    14.         "xxxxx",
    15.         "xxxxx"
    16.         );//подключение к базе данных
    17.    
    18.     }
    19. }
    20.  
    21.  
    22. class Books {
    23.     public $mysqli;
    24.  
    25.     public function __construct($mysqli)
    26.     {
    27.         $this->mysqli = $mysqli;
    28.     }
    29.  
    30.     public function selectBooks()
    31.     {
    32.          $this->mysqli->query("SELECT * FROM comment");
    33.     }
    34. }
    35. $mysqli = new DB_CONFIG();
    36. $books = new Books($mysqli);
    37.  
    38.  
    39. $books->selectBooks();
    40.    
    41. ?>


    Выдает ошибку: Fatal error: Call to undefined method DB_CONFIG::query() in Z:\home\test1.ru\www\classes\Books.php on line 33
     
  9. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    @Legolazik, ты ошибки переводишь?
     
  10. Legolazik

    Legolazik Новичок

    С нами с:
    24 июн 2016
    Сообщения:
    8
    Симпатии:
    0
    Да, там говорится, что я вызываю неопределенный метод query(), но как он может быть не определен, если он заложен в Php, разве нет?
     
  11. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    метод Query есть у класса mysqli, объект которого ты создаёшь в своём классе. А вот у твоего класса метода такого нет.
    И да, почему его как статику вызываешь?
     
    Legolazik нравится это.
  12. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Ты конструктору класса Books передаешь не объект класса mysqli. Собственно в самом классе ожидается объект класса mysqli. В ошибке так и говорится, что класс DB_CONFIG не имеет такого метода, если взглянуть на этот класс, так и есть.
     
    Legolazik нравится это.
  13. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Ну ты и Артист... :D
    Госпади :eek:
    What is it?
    Тебе же @Ganzal код написал, правильный.

    На найди 10 отличий(Метафора*).
    PHP:
    1. class Books
    2. {
    3. private $mysqli;
    4. public function __construct(\mysqli $mysqli)
    5. {
    Держи изучай, жуй, читай чё хочешь делай, но пока базу не освоишь, дальше даже не прыгай.

    У тебя там какие то жуткие пробелы вообще, по азам просто.
    PHP:
    1. Class know {
    2.      private $SmartBrain;
    3.  
    4.      public function lessonOne($link) {
    5.             return $SmartBrain;
    6. }
    7.  
    8. }
    PHP:
    1. $I_DoNotKnow_php = know();
    $SmartBrain = $I_DoNotKnow_php->lessonOne(клик сюды на изучение);
    PHP:
    1. var_dump($SmartBrain);
    На смотри вообще заного всё с того момента как работает всё, ты не различаешь что такое функциональное программирование, и ООП. Напрочь.
     
    #13 askanim, 28 июн 2016
    Последнее редактирование: 28 июн 2016
  14. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    только не много не так, пусть будет так, а то мы возвращаем пустую переменную, а так не пойдёт, у нас же умный мозг, а не пустой :D . Будем считать что твой мозг будет работать как функция Только не много в усовершенствованном виде, так скажем после считывания ты будешь сохранять это в бд. То есть в свой мозг :D
    PHP:
    1. Class know {
    2.      private $SmartBrain;
    3.      public function lessonOne($link) {
    4.             $this->SmartBrain = file_get_contents($link);
    5.             return $SmartBrain;
    6. }
    7. }
     
  15. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.632
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    А возвращаешь что?.
    И придержи коней) не грузи начинающего.
     
    Legolazik нравится это.
  16. Legolazik

    Legolazik Новичок

    С нами с:
    24 июн 2016
    Сообщения:
    8
    Симпатии:
    0
    Вроде получилось, теперь передается объект mysqli в конструктор класса Books
    Так?


    PHP:
    1. <?php
    2. header('Content-Type: text/html; charset=utf-8');
    3.  
    4. class DB_CONFIG
    5. {
    6.    public $q;
    7.  
    8.     function connectDataBase ()
    9.    {
    10.         $this->q = new mysqli
    11.         (
    12.         "xxxx",
    13.         "xxxx",
    14.         "xxxx",
    15.         "xxxx"
    16.         );//подключение к базе данных
    17.         return $this->q;
    18.     }
    19. }
    20.  
    21.  
    22. class Books
    23. {
    24. private $mysqli;
    25. public function __construct($param)
    26. {
    27.     $this->mysqli = $param;
    28. }
    29. public function otherMethod ()
    30. {  
    31.    
    32.     $this->mysqli->query("SELECT * FROM comment");
    33. }
    34. }
    35. $db = new DB_CONFIG();
    36. $param = $db->connectDataBase();
    37.  
    38. $books = new Books($param);
    39. $books->otherMethod();
    40. ?>
    Но на выводе дает пустой лист
     
  17. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    логически ничего не поменялось )))
     
  18. Legolazik

    Legolazik Новичок

    С нами с:
    24 июн 2016
    Сообщения:
    8
    Симпатии:
    0
    Да?))) почему пустой лист?
     
  19. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    потому что ничего не происходит
     
  20. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.555
    Симпатии:
    1.754
    Ты только запросил данные. А кто выводить будет?