Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class DB { //основной класс, описывает подключение к БД и содержит методы для работы с ней
- const DB_HOST = "localhost"; //хост MySQL
- const DB_USER = "root"; //пользователь MySQL
- const DB_PASS = ""; //пароль пользователя MySQL
- const DB_NAME = "testDB"; //название БД
- private $dbconn; //здесь будет храниться указатель на соединение с MySQL
- public function __construct() { //в конструкторе класса осуществляется подключение к БД и создается таблица (если она еще не создана)
- $this->dbconn = mysql_connect(self::DB_HOST, self::DB_USER, self::DB_PASS); //соединяемся с MySQL
- mysql_select_db(self::DB_NAME); //переключаемся на нужную БД
- $sql = "CREATE TABLE IF NOT EXISTS testTable(
- id INTEGER PRIMARY KEY AUTO_INCREMENT,
- name TEXT,
- email TEXT,
- birthdate TEXT,
- regdate INTEGER,
- status BOOL)"; //формируем запрос, создающий таблицу, если ее не существует
- mysql_query($sql, $this->dbconn); //создаем таблицу
- }
- public function __destruct() { //деструктор класса закрывает соединение с БД
- mysql_close($this->dbconn); //закрываем соединение с MySQL
- }
- public function ImportFromCSV($filename) { //метод, осуществляющий импорт из CSV файла в БД
- $file = fopen($filename, "r+"); //открываем CSV файл на чтение и запись
- fgetcsv($file); //перемещаем курсор в файле на вторую строку (в первой хранятся заголовки)
- while ($line = fgetcsv($file, 0, "; ")) { //построчно читаем файл
- $line[3] = strtotime($line[3]); //заменяем дату регистрации на ее представление в виде целого числа
- $line[4] == "On" ? $line[4] = "true" : $line[4] = "false"; //преобразуем значения Статуса в логические
- $sql = "INSERT INTO testTable (name,email,birthdate,regdate,status)
- VALUES ('" . $line[0] . "','" . $line[1] . "','" . $line[2] . "'," . $line[3] . "," . $line[4] . ")";
- //формируем запрос на добавление записи в таблицу
- $result = mysql_query($sql, $this->dbconn); //добавляем запись в таблицу
- if (!$result)
- return false; //если не удалось добавить запись, метод возвращает false
- }
- fclose($file); //закрываем CSV файл
- return true; //все прошло успешно - метод возвращает true
- }
- public function GetByID($id) { //метод возвращает моссив полей записи из БД с заданным значением id
- $sql = "SELECT name,email,birthdate,regdate,status
- FROM testTable WHERE id = " . $id; //формируем запрос на извлечение записи
- $result = mysql_query($sql, $this->dbconn); //извлкаем запись
- if (!$result)
- return false; //если невозможно извлечь запись, метод возвращает false
- $line = mysql_fetch_assoc($result); //помещаем поля запсиси в ассоциативный массив
- $line["regdate"] = date("d.m.Y G:i", $line["regdate"]); //преобразуем Дату регистрации из целого значения
- //в строку с датой и временем
- $line["status"] == 1 ? $line["status"] = "On" : $line["status"] = "Off"; //преобразуем Статус из логческого значения
- //в строку со значением статуса
- return $line; //возвращаем массив со значениями полей записи
- }
- public function ReverseStatus($id) { //метод меняет статус на противоположный у записи с заданным id
- $sql = "SELECT status FROM testTable WHERE id = " . $id; //формируем запрос на извлечение значения статуса
- $result = mysql_query($sql, $this->dbconn); //выполняем запрос
- if (!$result)
- return false; //если невозможно извлечь запись, метод возвращает false
- $line = mysql_fetch_assoc($result); //записываем результат в массив
- $line["status"] == 1 ? $new_status = "false" : $new_status = "true"; //устанавливаем новые значения статуса
- $sql = "UPDATE testTable SET status = " . $new_status . " WHERE id = " . $id; //формируем запрос на изменеие статуса
- mysql_query($sql, $this->dbconn); //выполняем запрос
- return true; //все в порядке - метод возвращает true
- }
- }
- $testDB = new DB; //создаем новый объект БД
- $testDB->ImportFromCSV("test.csv"); //импортируем данные из CSV
- $id = rand(1, 8); //получаем случайное значение id (от 1 до 8, поскольку в исходных данных 8 записей)
- $testDB->ReverseStatus($id); //меняем статус у записи
- $res = $testDB->GetById($id); //получаем массив с полями записи
- echo implode("; ", $res); //выводим содержимое массива в необходимом формате
- /* Конечено этот код не идеален, ибо нет предела совершенству. Сюда не мешало бы добавить обработку исключений
- и ошибок, возможно стоило описать отдельный класс для записи из БД и уже в нем реализовывать метод, возвращающий
- значения полей записи и метод, который меняет статус записи на противоположный. Однако, вышеприведенный код
- в полной мере решает задачу, описанную в тестовом задании и
- написан в соответсвии с принципами ООП. */
Add Comment
Please, Sign In to add comment