Всем добрый день. Начал изучать ООП php. Сейчас мне нужно реализовать запрос к БД. На данный момент я реализовал подключение к БД через класс но запнулся на выполнение запросов. Ниже листинг того что удалось сделать:
<?// Параметры для подключения
class connect_db
{
private $host, $user, $password, $table, $link;
public function parametr_connect()
{
$this->host = "localhost";
$this->user = "mysql";
$this->password = "mysql";
$this->table = "db";
$this->link = mysqli_connect ($this->host, $this->user, $this->password, $this->table);
}
}
$connect_mysql = new connect_db();
$connect_mysql->parametr_connect();
if ($connect_mysql->connect_errno) {
echo "Не удалось подключиться к MySQL: " . $connect_mysql->connect_error;
}
else
{
}
?>
На подключение не ругается (проверял изменяя пароль в свойстве password. Но мне не понятно как работать с методом parametr_connect после его вызова. Пожалуйста помогите, т. к. информацию не могу найти. Заранее спасибо и всех с наступившим.
PHP
Как выполнить запрос в бд на php ооп
Ну так используй $this->link в методах, в чем проблема-то?
По идее, ожидается что экземпляры класса "клиент БД" инкапсулируют все кроме публичных свойств и методов для работы с базой, а сам класс должен быть грамотно описан.
Поэтому, во-первых, напиши интерфейс базового класса; во-вторых, напиши сам базовый класс, реализующий только общий функционал (общую логику), и сохраняющий приватные методы (специфичные для СУБД или структуры базы) абстрактными - даже если потомок сейчас будет только один; в-третьих, вынеси "прибитые гвоздями" параметры подключения в параметры метода установки соединения (желательно ассоц. массивом, и с пробросом через конструктор); в-четвертых, реализуй приватные методы (непосредственно работы с БД) в классе-потомке, который и будет инстанцироваться как конечная реализация (но в юзеркоде работать следует с уровнем базового класса, не привязываясь к потомку!).
// И кстати, только бараны используют mysqli в новых (не легаси) проектах, при том что уже тыщу лет есть PDO. А отсутствие контроля ошибок, вообще неприемлемо.
По идее, ожидается что экземпляры класса "клиент БД" инкапсулируют все кроме публичных свойств и методов для работы с базой, а сам класс должен быть грамотно описан.
Поэтому, во-первых, напиши интерфейс базового класса; во-вторых, напиши сам базовый класс, реализующий только общий функционал (общую логику), и сохраняющий приватные методы (специфичные для СУБД или структуры базы) абстрактными - даже если потомок сейчас будет только один; в-третьих, вынеси "прибитые гвоздями" параметры подключения в параметры метода установки соединения (желательно ассоц. массивом, и с пробросом через конструктор); в-четвертых, реализуй приватные методы (непосредственно работы с БД) в классе-потомке, который и будет инстанцироваться как конечная реализация (но в юзеркоде работать следует с уровнем базового класса, не привязываясь к потомку!).
// И кстати, только бараны используют mysqli в новых (не легаси) проектах, при том что уже тыщу лет есть PDO. А отсутствие контроля ошибок, вообще неприемлемо.
Виталий Алтынников
Я знаю про PDO но в нем нужно разбираться (я не хочу его шаблонно использовать). Я хочу сделать так, изучить возможности использования работы mysqli на php ооп. Далее переписать код проекта (да, я его написал в процедурном стиле и поэтому я столкнулся с проблемой дублирование кода и невозможности и невозможности объявления этого кода единожды для его использования на разных страницах. Конечно есть вариант делать на каждый sql запрос отдельный файл, но это честно говоря бред) на объектно ориентированный стиль, далее PDO и попутно с ним ajax)))
Виталий Алтынников
Ну опять же разработка на перспективу, поэтому лучше делать так как надо, нежели потом от этого страдать :)
Виталий Алтынников
Ознакомившись в общем, там не сильно много менять нужно будет.
Виталий Алтынников
))
Реализация подключение к бд, как я думаю - должна быть в конструкторе вашего класса, при создании экземпляра класса $connect_mysql = new connect_db(); создаётся и подключение к бд, далее необходимо реализовать методы бд. Класс -> База данных должен уметь: заносить данные в бд, делать выборку, обновлять и удалять. Соответственно далее вы и реализуете эти методы в классе. Ваш класс должен называться class Bd, реализовывать отдельно класс подключения к бд не целесообразно. Что-то типа того https://myrusakov.ru/php-db-class.html
Виталий Алтынников
То есть я эти методы объявляю в классе и вызываю их как в фанкции в коде программы. Верно ли я говорю?
Виталий Алтынников
public function __construct()
{
$this->host = "localhost";
$this->user = "mysql";
$this->password = "mysql";
$this->table = "db";
$this->mysqli = new mysqli($this->host, $this->user, $this->password, $this->table);
$this->mysqli->query("SELECT * FROM db");
$this->mysqli->num_rows();
}
К примеру я хочу вывести количество полученных строк, через процедурный стиль делается это через функцию mysqli_num_rows. В ООП я не могу их вывести, показывает ошибку Fatal error: Uncaught Error: Call to undefined method mysqli::num_rows() in C:\OpenServer\domains\test.ru\index.php:16 Stack trace: #0 C:\OpenServer\domains\test.ru\index.php(28): connect_db->__construct() #1 {main} thrown in C:\OpenServer\domains\test.ru\index.php on line 16 ну типа я вызываю неопределенный метод. Помогите дописать
{
$this->host = "localhost";
$this->user = "mysql";
$this->password = "mysql";
$this->table = "db";
$this->mysqli = new mysqli($this->host, $this->user, $this->password, $this->table);
$this->mysqli->query("SELECT * FROM db");
$this->mysqli->num_rows();
}
К примеру я хочу вывести количество полученных строк, через процедурный стиль делается это через функцию mysqli_num_rows. В ООП я не могу их вывести, показывает ошибку Fatal error: Uncaught Error: Call to undefined method mysqli::num_rows() in C:\OpenServer\domains\test.ru\index.php:16 Stack trace: #0 C:\OpenServer\domains\test.ru\index.php(28): connect_db->__construct() #1 {main} thrown in C:\OpenServer\domains\test.ru\index.php on line 16 ну типа я вызываю неопределенный метод. Помогите дописать
Похожие вопросы
- Нужна помощь c запросами и базой данных, PHP, MySQL
- Соеденение БД с PHP для записи данных регистрации для сайта
- Для чего использовать ООП в php
- PHP MYSQL после ввода запроса , отображается пустая строка перед 1 кой, немогу понять Помогите пожалуйста
- Два SQL запроса одновременно | PHP
- Несколько AJAX запросов на один PHP файл.
- PHP не видит данных POST запроса
- Помогите найти в бд цифру которая находится в переменной php
- PHP и MySQL - что лучше - сделать в таблице меньше полей, но длиннее запрос или больше полей и короче запрос?
- Подключение несколько БД через require