Зв’язок з базами даних mysql з php
СУБД MySQL - одна з безлічі баз даних, підтримуваних в PHP. Система MySQL розповсюджується безкоштовно і має достатню потужність для вирішення реальних завдань.
Короткий вступ в MySQL
SQL - це абревіатура від слів Structured Query Language. що означає структурований мову запитів. Ця мова є стандартним засобом для доступу до різних баз даних.
Система MySQL являє собою сервер, до якого можуть підключатися користувачі віддалених комп'ютерів.
Для роботи з базами даних зручно користуватися засобом, що входить в комплект Web-розробника: Denwer phpMyAdmin. Тут можна створити нову базу даних, створити нову таблицю в обраній базі даних, заповнити таблицю даними, а також додавати, видаляти і редагувати дані.
Всі рядки таблиці повинні мати значення в цьому атрибуті. Якщо не вказано, поле може бути порожнім (NULL)
Спеціальна можливість MySQL, яку можна задіяти в числових стовпцях. Якщо при вставці рядків в таблицю залишати таке поле порожнім, MySQL автоматично генерує унікальне значення ідентифікатора. Це значення буде на одиницю більше максимального значення, вже існуючого в стовпці. У кожній таблиці може бути не більше одного такого поля. Стовпці з AUTO_INCREMENT повинні бути проіндексованими
Стовпець є первинним ключем для таблиці. Дані в цьому стовпці повинні бути унікальними. MySQL автоматично індексує цей стовпець
Після целочисленного типу означає, що його значення може бути або позитивним, або нульовим
Назва стовпця таблиці
Створення нової бази даних MySQL здійснюється за допомогою SQL-команди CREATE DATABASE.
Для створення автообновляемого поля з поточною датою типу TIMESTAMP або DATETIME використовуйте наступну конструкцію:
Додавання даних в цю таблицю здійснюється за допомогою SQL-команди INSERT. наприклад:
Для отримання даних з таблиці служить оператор SELECT. Він витягує дані з бази, вибираючи рядки, які відповідають заданому критерію пошуку. Оператор SELECT супроводжує чимала кількість опцій і варіантів використання.
Символ * означає, що необхідні все поля. наприклад:
Для отримання доступу тільки до деякого полю слід вказати його ім'я в інструкції SELECT. наприклад:
Щоб отримати доступ до підмножини рядків в таблиці, слід вказати критерій вибору, який встановлює конструкція WHERE. Наприклад, щоб вибрати наявні в наявності недорогі книги про PHP, треба скласти запит:% Відповідає будь-якій кількості символів, навіть нульових
_ Відповідає рівно одному символу
Для того, щоб рядки, витягнуті за запитом, перераховувалися в певному порядку, використовується конструкція ORDER BY. наприклад:
За замовчуванням порядоксортіровкі йде по зростанню. Змінити порядок сортування на зворотний можна за допомогою ключового слова DESC.
Сортувати можна і за кількома стовпцями. Замість назв стовпців можна використовувати їх порядкові номери:
Для зміни раніше записаних в таблицю значень потрібно скористатися командою UPDATE. Наприклад, ціну всіх книг підвищили на 10%:
Конструкція WHERE обмежить роботу UPDATE певним рядками. наприклад:
Для видалення рядків з бази даних використовується оператор DELETE. Непотрібні рядки вказуються за допомогою конструкції WHERE. Наприклад, якісь книги продані:
Якщо потрібно видалити всі записи
Для повного видалення таблиці використовується:
Зв'язок PHP з базою даних MySQL
Попрацювавши з phpMyAdmin над створенням бази даних, можна приступити до підключення цієї бази даних до зовнішнього Web-інтерфейсу.
Щоб отримати доступ до бази даних з Web, використовуючи PHP, треба зробити такі основні кроки:- Підключення до сервера MySQL.
- Вибір бази даних.
- Виконання запиту до бази даних:
- додавання;
- видалення;
- зміна;
- пошук;
- сортування.
- Отримання результату запиту.
- Від'єднання від бази даних.
Щоб з'єднатися з сервером бази даних в PHP є функція mysql_connect (). Її аргументи: ім'я комп'ютера, ім'я користувача і пароль. Ці аргументи можна опустити. За замовчуванням ім'я комп'ютера = localhost. тоді ім'я користувача і пароль не потрібно. Якщо PHP використовується в поєднанні з сервером Apache, то можна скористатися функцією mysql_pconnect (). У цьому випадку з'єднання з сервером жевріє після завершення роботи програми або виклику функції mysql_close (). Функції mysql_connect () і mysql_pconnect () повертають ідентифікатор підключення, якщо все пройшло успішно. наприклад:
Після того, як з'єднання з сервером MySQL встановлено, потрібно вибрати базу даних. Для цього використовується функція mysql_select_db (). Її аргумент: ім'я бази даних. Функція повертає true. якщо зазначена база даних існує і доступ до неї можливий. наприклад:
Для додавання, видалення, зміни та вибору даних необхідно сформулювати і виконати запит SQL. Для цього в мові PHP існує функція mysql_query (). Її аргумент: рядок із запитом. Функція повертає ідентифікатор запиту.
При кожному виконанні прикладу 1 в таблицю буде додаватися новий запис, що містить одні й ті ж дані. Зрозуміло має сенс додавати в базу дані, введені користувачем.
У прикладі 2.1 приведена HTML-форма для додавання нових книг в базу даних.
приклад 2.1
Результати заповнення цієї форми передаються в insert_book.php.
приклад 2.2
У прикладі 2.2 введені рядкові дані оброблені функцією addslashes (). Ця функція додає зворотні слеші перед одинарними лапками ( '), подвійними лапками ( "), зворотним слешем (\) і null-байтом. Справа в тому, що за вимогами сістаксіса запитів баз даних такі символи дожни полягати в лапки.
Для визначення кількості записів в результаті запиту використовується функція mysql_num_rows ().
У прикладі 3.1 приведена HTML-форма для пошуку певних книг в базі даних.
приклад 3.1
Результати заповнення цієї форми передаються в search_book.php.
приклад 3.2
Альтернативний варіант
Використання механізму транзакцій
Використання механізму транзакція на прикладі як передати гроші від однієї людини іншій
SELECT ... FOR UPDATE
Якщо Ви запускаєте кілька процесів, які роблять select запит до однієї і тієї ж таблиці, то вони можуть вибрати одну і ту ж запис одночасно.
Щоб уникнути вищезгаданої ситуації необхідно виконати не просто SELECT запит, а його розширену версію, про яку багато хто і не підозрюють: SELECT ... FOR UPDATE.
Таким чином, при виконанні даного запиту, всі порушені записи в базі даних будуть заблоковані до завершення сеансу роботи з БД або до моменту поновлення даних записів. Інший скрипт не зможе вибрати заблоковані записи до тих пір, поки не настане одне зі згаданих умов.
Однак не все так просто. Вам потрібно виконати ще кілька умов. По-перше, ваша таблиця повинна бути створена на основі архітектури InnoDB. В іншому випадку блокування просто не спрацьовуватиме. По-друге, перед виконанням вибірки необхідно відключити авто-комун запиту. Тобто іншими словами автоматичне виконання запиту. Після того як ви вкажете UPDATE запит, необхідно буде ще раз звернутися до бази і закоммітіть зміни за допомогою команди COMMIT: