Доступ до бази даних mysql за допомогою рнр
Довідковий матеріал з основних мов програмування і верстки сайтів.
Готова методика створення простих і складних динамічних сайтів, з використанням PHP і MySQL.
Розробка веб-сайтів під "ключ".
Розробка окремих фрагментів сайтів, консультації з питань верстки веб-сторінок і веб-програмування.
Веб-інструмент
Веб-майстерня
Веб-послуги
Веб-графіка
Веб-ресурси
Хочете бути в курсі подій, що відбуваються на сайті? Підпишіться на отримання останніх новин та статей.
Подивіться в Google
Доступ до бази даних MySQL за допомогою РНР. Виконання запитів до бази даних за допомогою РНР
До сих пір, в прикладах для зберігання та вилучення даних ми використовували двовимірні файли. Там же, ми говорили про те, що застосування систем реляційних баз даних забезпечує більш просте, безпеки та ефективне виконання завдань збереження і вилучення даних. Тепер, попрацювавши з MySQL над створенням бази даних, можна приступати до підключення цієї бази даних до зовнішнього веб-інтерфейсу.
Як працюють бази даних
У нас є база даних MySQL, тому можемо підготувати код РНР, для виконання описаних кроків. Почнемо з пошукової форми. Це проста HTML-форма. Код для цієї форми показаний в лістингу.
search.php -пошуковий сторінка для БД Інтернет-магазин
Після клацання на кнопці Знайти викликається сценарій results.php. Його повний код показаний нижче.
results.php -ізвлекает результати запиту з бази даних MySQL і форматує їх для відображення.
Відкрийте пошукову сторінку, заповніть форму пошуку і натисніть "Знайти".
Зверніть увагу, що сценарій дозволяє вводити групові символи MySQL% і _ (підкреслення). Ця можливість виключно корисна для користувачів. Якщо згадані символи створюють проблеми в вашому додатку, можете скасувати їх.
Виконання запитів до бази даних
У будь-якому сценарії, який забезпечує доступ до бази даних з Веб, необхідно виконати ряд базових кроків:
- Перевірити і відфільтрувати дані, що надходять від користувача.
- Встановити з'єднання з необхідною базою даних.
- Реалізувати запит до бази даних.
- Отримати результати.
- Уявити результати користувачеві.
Саме ці дії виконує сценарій results.php, і ми по черзі досліджуємо кожне з них.
Перевірка і фільтрація вхідних даних
Перш за все, необхідно видалити всі зайві прогалини, які користувач міг випадково ввести перед або після критерію пошуку. Це робиться за допомогою функції trim (), яка застосовується до $ searchterm.
$ Searchterm = trim ($ searchterm);
Наступний етап пов'язаний з перевіркою того, що користувач вказав критерій і тип пошуку. Зверніть увагу, що вона виконується лише після видалення зайвих пробілів по краях критерію пошуку. Якщо поміняти ці дії місцями, може виникнути ситуація, коли критерій не був порожнім і тому не привів до висновку повідомлення про помилку, але при цьому містив тільки прогалини, які повністю видаляються функцією trim ():
if (! $ searchtype ||! $ searchterm)
echo 'Ви не ввели параметри пошуку. Будь ласка, поверніться на попередню сторінку і повторіть введення ';
exit;
>
Була виконана величезна змінної $ searchtype незважаючи на те, що в даному випадку вона надходить з HTML-дескриптора SELECT. Може виникнути питання, навіщо потрібно перевіряти вхідні дані. Не забувайте, що з базою даних можения бути пов'язаний далеко не один інтерфейс.
І ще, якщо передбачається введення користувачем якихось даних, важливо виключити з них будь-які символи, що управляють. Як ви, напевно, пам'ятаєте ми вже говорили про функції addslashes (), stripslashes () і get_magic_quotes_gpc (). Ми повинні відзначити керуючі символи (літералізовать їх) в даних, введених користувачем, перд збереженням їх в базі.
У нашому випадку здійснюється перевірка значення, що повертається функцією get_magic_quotes_gpc (). Це значення вказує, чи виконується автоматичне взяття в лапки. Якщо це не так, за допомогою функції addslashes () скасовуються керуючі символи:
if (! get_magic_quotes_gpc ())
$ Searchtype = addslashes ($ searchtype);
$ Searchterm = addslashes ($ searchterm);
>
Функція htmlspecialchars () використовується для кодування символів, які мають спеціальне значення в HTML. Наші тестові дані не містять символу амперсанда (), знаків "менше" (<), больше (>) Або подвійних лапок ( "), проте амперсанд може зустрічатися в назвах багатьох книг. Використання цієї функції допоможе уникнути помилок в майбутньому.
установка з'єднання
В PHP5 є нова бібліотека для підключення MySQL, звана mysqli ( "i" означає "improved" -Поліпшення). У MySQL4 з'явився новий швидкий протокол підключення, і mysqli дозволяє задіяти всі його переваги. Крім того, бібліотека mysqli дозволяє використовувати два синтаксису: об'єктно-орієнтована і процедурний.
Для з'єднання з сервером MySQL служить наступний рядок сценарію:
@ $ Db = new mysqli ( 'localhost', 'root', 'shop', 'books');
У цьому рядку створюється екземпляр класу mysqli і робиться спроба з'єднання з хостом 'localhost' з використанням імені 'root', і пароля 'shop'. З'єднання буде використовувати базу даних 'books'.
Відповідно до об'єктно-орієнтованим підходом, ви викликаєте методи отриманого об'єкта для доступу до бази даних. Якщо ви віддаєте перевагу процедурний підхід, mysqli допускає його, то в цьому випадку підключення буде виглядати наступним чином:
@ $ Db = mysqli_connect ( 'localhost', 'root', 'shop', 'books');
Наведена функція повертає ресурс, а не об'єкт. Цей ресурс є з'єднанням з базою даних, і при використанні процедурного підходу ви повинні передати його в усі інші функції mysqli. Даний підхід дуже схожий на роботу з файловими функціями на зразок fopen ().
Більшість функцій mysqli мають об'єктно-орієнтована, і процедурний інтерфейс. У загальному випадку, відмінності між ними полягають в тому, сто імена процедурних варіантів функцій починаються з префікса mysqli_, і їм необхідно передавати ресурс, який отриманий в результаті виклику функції mysqli_connect (). Винятком з цих правил є підключення до бази даних, так як воно виконується конструктором класу mysqli.
Результат спроби підключення повинен бути перевірений, оскільки решта код у разі невдалого підключення працювати не буде. Перевірка здійснюється за допомогою наступного коду:
if (mysqli_connect_errno ())
echo 'Помилка: Неможливо встановити з'єднання з базою даних. Будь ласка спробуйте ще раз пізніше. ';
exit;
>
Функція mysqli_connect_errno () повертає номер помилки або 0 в разі вдалого підключення.
Зверніть увагу, що рядок, в якій виконується спроба підключення до бази даних, починається з операції придушення помилок @. В цьому випадку можна організувати елегантну обробку помилкових ситуацій. Обробку помилок можна також реалізувати за допомогою винятків, проте в даному простому прикладі їх вирішено не використовувати.
Слід пам'ятати, що в MySQL кількість з'єднань, які можуть існувати одночасно, обмежена. Ця межа визначається параметром max_connections. Його призначення, як і спорідненого йому параметра MaxClients з веб-сервера Apache, змусити сервер відхиляти нові запити на з'єднання, щоб не допустити повного використання ресурсів комп'ютера в годинник найвищої завантаження або при аварії програма забезпечення.
Також ці установки можна змінювати, редагуючи конфігураційні файли. Щоб налаштувати параметр MaxClients в Apache, слід внести зміни в файл httpd.conf. Налаштування параметра max_connections в MySQL здійснюється шляхом редагування файлу my.conf.
Вибір бази даних
Працюючи з MySQL з командного рядка, необхідно вказувати використовувану базу даних:
Те ж саме необхідно і при підключенні з Веб. База даних, яка повинна використовуватися, вказується в параметрі конструктора mysqli або функції mysqli_connect (). Якщо згодом знадобиться змінити використовувану базу даних, для цього служить функція mysqli_select_db (), доступ до якої здійснюється наступним чином:
$ Db -> select_db (dbname)
mysqli_select_db (db_resource, db_name)
І тут підтримуються обидві версії функції - об'єктно-орієнтована і процедурна, причому процедурна відрізняється льшь префіксом mysqli_ в імені і параметром, в якому повинен передаватися ресурс підключення.
Виконання запиту до бази даних
Щоб здійснити запит, необхідно скористатися функцією mysqli_query (). Однак перш цей запит необхідно побудувати:
$ Query = "select * from books
where ". $ searchtype."
like '% ". $ searchterm."%' ";
У цьому випадку буде виконуватися пошук значення, введеного користувачем ($ searchtype) у вказаному ним поле ($ searchterm). Ви, мабуть, звернули увагу на те, що для установки відповідності ми вжили like, а не eqal -при пошуку в базі даних зазвичай має сенс дещо розширити межі пошуку.
Тепер маєте змогу надсилати запити:
$ Result = $ db -> query ($ query);
Або, якщо ви віддаєте перевагу процедурний інтерфейс, запит буде виглядати так:
$ Result = mysqli_query ($ db, $ query);
Ви передаєте запит, який необхідно виконати, і в разі процедурного інтерфейсу, зв'язок з базою даних.
Об'єктно-орієнтована версія повертає об'єкт результату, а процедурна версія - ресурс результату. У будь-якому випадку повертається значення зберігається в змінної $ result для подальшого використання. Функція повертає значення false в разі помилки.
Отримання результатів запиту
Існує безліч функцій, які дозволяють різними способами виокремлювати потрібні фрагменти з об'єкта або ідентифікатора результату. Об'єкт або ідентифікатор результату - це ключ доступу до повернутих запитом рядках.
У нашому прикладі ми підрахували кількість повертаються запитом рядків і скористалися функцією mysqli_fetch_assoc ().
У разі об'єктно-орієнтованого підходу кількість повернутих рядків зберігається в елементі num_rows об'єкта результату. Звернутися до згаданого елементу можна наступним чином:
$ Num_results = $ result -> num_rows;
При процедурному підході для отримання кількості повернутих рядків використовується функція mysqli_num_rows (), якою необхідно передати ідентифікатор результату:
Ця інформація дуже корисна, якщо планується обробляти або відображати результати. Знання кількості рядків дозволяє організувати цикл по ним:
for ($ i = 0; $ i <$num_results; $i++)
//Обробка результатів
>
У кожній ітерації цього циклу відбувається виклик $ result -> fetch_assoc () (або mysqli_fetch_assoc ()) Цикл не виконуватиметься при відсутності повернутих рядків. Саме ця функція витягує кожен рядок з результуючого набору і повертає її у вигляді масиву, в якому кожен ключ є ім'ям атрибута, а кожне значення відповідним значенням:
$ Row = $ result -> fetch_assoc ();
Або з використанням процедурного підходу:
$ Row = mysqli_fetch_assoc ($ result);
Маючи масив $ row, можна пройти по всім полям і належним чином відобразити кожне з них:
echo '
ISBN: ';
echo stripslashes ($ row [ 'isbn']);
Як згадувалося раніше, stripslashes () викликається для того, щоб "підчистити" значення, перш ніж відображати його користувачеві.
Існує кілька варіантів отримання результату з ідентифікатора результату. Замість масиву з іменованими ключами можна скористатися нумерованим масивом, застосувавши mysqli_fetch_row ():
$ Row = $ result -> fetch_row ();
або, в разі процедурного підходу:
$ Row = mysqli_fetch_row ($ result);
Значення атрибутів бутут зберігатися в кожному з значень $ row [0], $ row [1] і так далі. Функція mysqli_fetch_array () дозволяє отримати рядок у вигляді масиву обох типів.
За допомогою функції mysqli_fetch_object () можна теж вибрати рядок для приміщення всередину об'єкта:
$ Row = $ result -> fetch_object ();
$ Row = mysqli_fetch_object ($ result);
Після цього доступ до кожного атрибуту можна отримати за допомогою
$ Row -> title, $ row -> author і так далі
Від'єднання від бази даних
Звільнення результуючого набору виконуються наступним чином:
Потім можна закрити з'єднання з базою даних:
У явному від'єднанні немає особливої необхідності, оскільки по завершенні виконання сценарію з'єднання буде закрито автоматично.
- Обговорити на форумі