iLegion
@iLegion
Web Developer

Проверка на корректность и «Как измененить методы на ООП»?

Здравствуйте. Есть база данных с 6 таблицами. Я создал файл который отправляет запрос и возвращает в конечном итоге один массив который состоит из данных 6 таблиц.
Меня интересует возможно ли пункты с "#Переделать в ООП" сделать в ооп стиле?
Если есть идеи по корректировке кода предлагайте.
Вот код:
<?php 
	class Hook
	{
		
		public function MySQLi()
		{
			$mysqli = mysqli_connect('127.0.0.1', 'root', '', 'products'); # Подключение к бд
			if (mysqli_connect_errno($mysqli)) {
				printf("Ошибка соединения ", mysqli_connect_error($mysqli)); # В случае ошибки выводит код и сообщение
				exit();
			}
            return $mysqli;
		}
		public function MySQLiQuery()
		{
            $mysqli = $this->MySQLi();
            $tables = array(
                'hook_on_the_grid',
                'hook_perforation',
                'hook_on_chipboard',
                'hook_on_the_economy_panel',
                'hook_systems',
                'trade accessories'
            );
            $count_tables = count($tables); 
            for ($i=0; $i < $count_tables; $i++) { # Перебирает массив $tables и создает новый с готовыми запросами
                foreach ($tables as $value) {
                    $query[]  = "SELECT * FROM `$value`";
                }
                return $query;
            }
		}
        public function MySQLiResult()
        {
            $mysqli = $this->MySQLi();
            $mysqli->query("SET NAMES utf8"); # Устанавливает кодировку для выходных данных бд
            $query = $this->MySQLiQuery();
            $count_query = count($query); 
            foreach ($query as $value) { # Перебор массива и отправка запросов
                $result[] = mysqli_query($mysqli, $value);
            }
            // return $result;
            foreach ($result as $value) { # Перебирает первые элементы из каждой категории
                $count_nums[] = mysqli_num_rows($value); # ПЕРЕДЕЛАТЬ В ООП
            } 
            // return $count_nums;

            foreach ($result as $value) {
                $rows[] = mysqli_fetch_assoc($value); # ПЕРЕДЕЛАТЬ В ООП
                for ($i=0; $i < $count_nums[0]; $i++) { 
                    $rows[] = mysqli_fetch_assoc($value); # Перебирает и сохраняет все данные из бд # ПЕРЕДЕЛАТЬ В ООП
                }
                $rows = array_filter($rows, function($element) { #Остортировывает пустые элементы в массиве
                    return !empty($element);
                });
            }
            return $rows;
        }
	}

    $hook = new Hook;
 ?>
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Yusif Zourab, Всё есть здесь php.net/manual/ru/book.mysqli.php

Вам нужно всё переделывать в ооп стиль mysqli, либо ничего.

Примерно так (я показал общий принцип, разгребать код не стал, он ужасен, если вообще работает):
spoiler
<?php

class Hook
{
	private $mysqli;
	
	public function MySQLi()
	{
		$this->mysqli = new \mysqli('127.0.0.1', 'root', '', 'products'); # Подключение к бд

		if ($this->connect_error) {
			die('Ошибка подключения ('.$mysqli->connect_errno.') '.$mysqli->connect_error);
		}
	}

	public function MySQLiQuery()
	{
		$tables = array(
			'hook_on_the_grid',
			'hook_perforation',
			'hook_on_chipboard',
			'hook_on_the_economy_panel',
			'hook_systems',
			'trade accessories'
		);
		$count_tables = count($tables); 
		$queries = [];

		# Перебирает массив $tables и создает новый с готовыми запросами
		for ($i=0; $i < $count_tables; $i++) {
			foreach ($tables as $value) {
				$queries[]  = "SELECT * FROM `$value`";
			}
		}

		return $queries;
	}

	public function MySQLiResult()
	{
		# Устанавливает кодировку для выходных данных бд
		$this->mysqli->query("SET NAMES utf8");

		$query = $this->MySQLiQuery();

		$count_query = count($query);

		foreach ($query as $value) { # Перебор массива и отправка запросов
			$result[] = $this->mysqli->query($mysqli, $value);
        }

		foreach ($result as $value) { # Перебирает первые элементы из каждой категории
			$count_nums[] = $value->num_rows($value);
        }

		foreach ($result as $value) {
			$rows[] = $value->fetch_assoc($value); # ПЕРЕДЕЛАТЬ В ООП
			for ($i=0; $i < $count_nums[0]; $i++) { 
				$rows[] = $value->fetch_assoc($value); # Перебирает и сохраняет все данные из бд # ПЕРЕДЕЛАТЬ В ООП
			}
			$rows = array_filter($rows, function($element) { #Остортировывает пустые элементы в массиве
				return !empty($element);
			});
        }

        return $rows;
    }
  }

    $hook = new Hook;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dimoff66
Кратко о себе: Я есть
Почитайте в поиске про объектно ориентированный стиль mysqli, эта возможность уже есть

Пример ООП стиля
$mysqli = new mysqli("example.com", "user", "password", "database");
if ($mysqli->connect_errno) {
    echo "Не удалось подключиться к MySQL: " . $mysqli->connect_error;
}

$res = $mysqli->query("SELECT 'выбора, чтобы угодить всем.' AS _msg FROM DUAL");
$row = $res->fetch_assoc();
echo $row['_msg'];


Было бы гораздо ценнее переделать массивы в ООП стиле, чтобы можно было чейнить функции.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы