Новости

PHP framework CodeIgniter: робота з базою даних

Ми продовжуємо вивчення фреймворка   CodeIgniter
Ми продовжуємо вивчення фреймворка CodeIgniter . Сьогодні мова піде про роботу з базами даних.

В минулій статті ми почали розробку невеликого сайту, що представляє собою звичайний каталог. Ми вже визначилися зі структурою даних, встановили і налаштували CodeIgniter. А також написали контролер з двома методами, які будуть створювати сторінку з загальним переліком книг і сторінку з детальною інформацією про обраної книзі.

Оскільки обом методам потрібна інформація з бази даних, розглянемо можливості CodeIgniter в плані роботи з БД.

У відповідності з архітектурою MVC для роботи з даними використовується модель. Що б створити модель в CodeIgniter потрібно написати клас, що успадковує Model і помістити його в папку system / application / models.

Для нашого застосування досить однієї моделі, назвемо її Catalogmodel. Створюємо файл system / application / models / catalogmodel.php і записуємо в нього наступний код.

<? Php class Catalogmodel extends Model {function Catalogmodel () {parent :: Model (); }}?>

Тепер нам потрібно підключити бібліотеку для роботи з базами даних. Для цього відкриваємо файл system / application / config / autoload.php і шукаємо змінну $ autoload [ 'libraries']. Вона містить масив з назвами всіх бібліотек, які будуть автоматично завантажуватися при зверненні до сайту. Ми додамо завантаження бібліотеки «database».

$ Autoload [ 'libraries'] = array ( 'database');

невеликий відступ

Одним з переваг CodeIgniter є низьке споживання ресурсів. Досягається це в основному за рахунок того, що за замовчуванням завантажується тільки мінімально необхідний для роботи набір бібліотек (ядро). Які з додаткових бібліотек завантажувати вирішуєте ви. І CodeIgniter надає кілька варіантів їх завантаження.

В даному випадку ми додали назву бібліотеки в $ autoload, тому що всі методи нашого контролера працюватимуть з БД. Якщо дані з БД потрібні тільки для створення частини сторінок, то краще завантажувати бібліотеку безпосередньо перед використанням.

$ This-> load-> database ();

Переходимо до підключення до бази даних. Взагалі-то CodeIgniter дозволяє працювати одночасно з декількома БД, але ми обмежимося найпростішим варіантом. Відкриваємо файл system / application / config / database.php і заповнюємо масив з параметрами підключення:

$ Db [ 'default'] [ 'hostname'] = "localhost"; // ім'я хоста, на якому запущений сервер БД $ db [ 'default'] [ 'username'] = "імя_пользователя_БД"; $ Db [ 'default'] [ 'password'] = "пароль"; $ Db [ 'default'] [ 'database'] = "bookcatalog"; // ім'я бази даних

Тепер можна працювати з БД за допомогою об'єкта db. Наприклад, відправити запит можна за допомогою функції query ().

$ This-> db-> query ( 'строка_запроса');

Отже, база даних доступна, запити ми виконувати можемо. Залишилося написати методи нашої моделі. Для нашого прикладу досить двох методів.

Перший буде повертати дані про всі книгах в БД без анотацій, тобто інформацію, необхідну для створення головної сторінки каталогу.

function getAllBooks () {$ qGetAll = "SELECT id, title, author, pages, genre FROM books"; $ Res = $ this-> db-> query ($ qGetAll); $ BooksData = $ res-> result_array (); if (count ($ booksData) == 0) {return false; } Return $ booksData; }

У рядках 2 і 3 ми формуємо і відправляємо запит. В результаті отримуємо об'єкт з результатами і перетворимо його в масив (за допомогою методу result_array ()).

Примітка. CodeIgniter надає ряд методів для роботи з результатами запиту. Їх опис можна подивитися тут .

Після цього, ми перевіряємо довжину масиву. І якщо вона дорівнює нулю (каталог порожній), повертаємо false. В іншому випадку, повертаємо масив з результатами.

Другий метод використовується для створення сторінки з детальною інформацією про обраної книзі.

function getBookDetails ($ bookId) {$ qGetBook = "SELECT * FROM books WHERE id =?"; $ Res = $ this-> db-> query ($ qGetBook, array ($ bookId)); $ BookData = $ res-> result_array (); if (count ($ bookData) == 0) {return false; } Return $ bookData [0]; }

У параметрі $ bookId методу передається значення поля id обраної книги.

Зверніть увагу на те, як ми формуємо запит. У рядку запиту замість значення параметра id ми ставимо знак питання. А методу query () в якості другого параметра передаємо масив зі значеннями. При відправці запиту значення будуть підставлені замість знаків запитання.

Що дає такий підхід? По-перше, запит легше читається. По-друге, всі спецсимволи SQL будуть автоматично перетворені в ескейп послідовності.

Примітка. Якщо ви формуєте рядок з параметрами запиту самостійно, не забувайте використовувати метод escape (). Наприклад, так $ this-> db-> escape ($ title). Це дозволить захиститися від SQL Injection.

Подальша робота методу практично повністю аналогічна getAllBooks (). Єдина відмінність полягає в тому, що в даному випадку ми повертаємо тільки перший елемент масиву з результатами, тому що в ньому не може бути більше одного елемента.

Все, модель нашого каталогу готова. Наступного разу ми допишемо контролер і створимо сторінки нашого каталогу.

До зустрічі!

Lt;?
Php class Catalogmodel extends Model {function Catalogmodel () {parent :: Model (); }}?
Function getBookDetails ($ bookId) {$ qGetBook = "SELECT * FROM books WHERE id =?
Що дає такий підхід?

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: