6. PHP та бази даних MySQL

Алгоритм роботи з базою даних:

1) з'єднатися з сервером БД;
2) вибрати базу даних;
3) це послати запит(далі працюємо з результатом, тобто прийшли даними);
4) закриваємо з'єднання.

Функції PHP для роботи з сервером MySQL:

У першому пункті встановлюємо з'єднання з БД. І функція, яка для цього призначена, називається mysql_connect («host», «login», «password»):

1
2
3
4
5
<?php
$connect = mysql_connect("localhost", "root", "password") or die("Помилка!");
 
mysql_close($connect);
?>

У першому параметрі ми вказуємо ім'я сервера (в нашому випадку це localhost), у другому параметрі ми вказуємо логін до бази (root) і в третьому - пароль (password). В інших випадках пароль може бути порожнім. Всю основну роботу ми будемо робити між ці двома функціями mysql_connect () і mysql_close ().

Вибір бази відбувається за допомогою функції mysql_select_db (), куди передається першим параметром ім'я бази і другим необов'язковим параметром посилання на відкрите з'єднання:

1
2
3
4
5
6
<?php
$connect = mysql_connect("localhost", "root", "password") or die("Помилка!");
mysql_select_db("mysql", $connect) or die("Неможливо обрати базу!");
 
mysql_close($connect);
?>

Зверніть увагу, що ми скрізь пишемо конструкцію or die (). Це потрібно для того, щоб розділити помилки самого PHP і помилки бази даних. Тобто, якщо не вказати цю конструкцію, то при неправильному виборі бази (наприклад її не існує) відбудеться помилка, яку ми не побачимо. Однак, PHP нам про це не повідомить. До всього іншого, у нас є ще дві функції, які дозволяють відслідковувати помилки бази даних - це mysql_errno () і mysql_error (). mysql_errno () - повертає номер помилки, а mysql_error () повертає опис помилки. Як правило, номер помилки не цікавий і нам ні про що не говорить, тому ми будемо використовувати другу функцію mysql_error ():

1
2
3
4
5
6
<?php
$connect = mysql_connect("localhost", "root", "password") or die("Помилка!");
mysql_select_db("mysql1", $connect) or die(mysql_error());
 
mysql_close($connect);
?>

Далі нам потрібно працювати з запитами. Відправка запиту виконується за допомогою функції mysql_query (), куди передається сам запит. Перед тим, як приймати дані, ми повинні вказати в якому кодуванні ми хочемо їх отримати. І для того, щоб у нас не було ієрогліфів, ми пишемо наступний рядок: mysql_query («SET NAMES 'cp1251'»); і далі вже посилаємо запит на вибірку даних: mysql_query («SELECT щось там»). Однак, таким чином нам дані повернуться в нікуди. Попросту повернеться або TRUE, або FALSE. Щоб дані прийшли туди, куди нам треба, ми повинні функцію mysql_query () присвоїти змінній, тоді в цьому випадку всі потрібні нам дані прийдуть в змінну з якою ми надалі будемо працювати: $ resultat = mysql_query («запит»):

1
2
3
4
5
6
7
<?php
$connect = mysql_connect("localhost", "root", "password") or die("Помилка!");
mysql_select_db("mysql", $connect) or die(mysql_error());
$sql = "SELECT * FROM help_category";
$resultat = mysql_query($sql) or die("Неможливо виконати запит!");
mysql_close($connect);
?>

Все що ми з вами обрали за допомогою функції mysql_query () потрапляє в змінну $ resultat. Ось тут, після того, як до нас прийшли дані, ми повинні закрити з'єднання. Якщо у нас будуть ще які-небудь запити, то з'єднання краще залишити відкритим, У більшості випадків ми дані запросили, отримали і всі, з'єднання можна закривати. Потім ми вже працюємо з змінної $ resultat. Сюди приходить табличка. Проблема в тому, що вона приходить в нечитаємій формі. Якщо ми подивимося її за допомогою var_dump ($ resultat), то вона буде виглядати так: resource (4) of type (mysqlresult). Тут є кілька варіантів або функцій обробки цієї змінної. І перша з них - це функція mysql_fetch_array (), куди передається наш результат. Якщо нам потрібно тільки індексований масив, то ми вказуємо константу MYSQL_NUM:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
$connect = mysql_connect("localhost", "root", "password") or die("Помилка!");
mysql_select_db("mysql", $connect) or die(mysql_error());
$sql = "SELECT * FROM help_category";
$resultat = mysql_query($sql) or die("Неможливо виконати запит!");
mysql_close($connect);
 
$row = mysql_fetch_array($resultat, MYSQL_NUM);
echo "<pre>";
print_r($row);
echo "</pre>";
?>

Якщо ж необхідний асоціативний масив, то ми користуємось констанктою MYSQL_ASSOC:

1
2
3
4
5
6
7
8
9
10
11
12
<p><php><?php
$connect = mysql_connect("localhost", "root", "password") or die("Помилка!");
mysql_select_db("mysql", $connect) or die(mysql_error());
$sql = "SELECT * FROM help_category";
$resultat = mysql_query($sql) or die("Неможливо виконати запит!");
mysql_close($connect);
 
$row = mysql_fetch_array($resultat, MYSQL_ASSOC);
echo "<pre>";
print_r($row);
echo "</pre>";
?>

У PHP для MySQL є аналог функції mysql_fetch_array ($ resultat, MYSQL_NUM) - це mysql_fetch_row ($ resultat). Для асоціативної функції mysql_fetch_array ($ resultat, MYSQL_ASSOC) є аналог під назвою mysql_fetch_assoc ($ resultat). Тепер, за допомогою циклу while виведемо всі дані в комірці name:

1
2
3
4
5
6
7
8
9
10
11
<?php
$connect = mysql_connect("localhost", "root", "password") or die("Помилка!");
mysql_select_db("mysql", $connect) or die(mysql_error());
$sql = "SELECT * FROM help_category";
$resultat = mysql_query($sql) or die("Неможливо виконати запит!");
mysql_close($connect);
 
while($row = mysql_fetch_assoc($resultat)){
    echo $row['name']."<br />";
}
?>

У PHP для роботи з MySQL є ще одна функція, яка в основному використовується, коли ми точно знаємо, що хочемо вибрати, тобто нам необхідно знати номер поля і ім'я комірки. Це так звана точкова вибірка. А функція називається mysql_result (), куди передається наш результат вибірки і як я вже сказав номер поля і номер комірки:

1
2
3
4
5
6
7
8
9
<?php
$connect = mysql_connect("localhost", "root", "password") or die("Помилка!");
mysql_select_db("mysql", $connect) or die(mysql_error());
$sql = "SELECT * FROM help_category";
$resultat = mysql_query($sql) or die("Неможливо виконати запит!");
mysql_close($connect);
 
echo mysql_result($resultat, 1, "name");
?>

Так само існує маса корисних функцій для збору інформації. Наприклад, порахувати кількість записів: mysql_num_rows ($ resultat). Або кількість полів: mysql_num_fields ($ resultat). Або дізнатися ім'я поля: mysql_field_name ($ resultat):

1
2
3
4
5
6
7
8
9
10
<?php
$connect = mysql_connect("localhost", "root", "password") or die("Помилка!");
mysql_select_db("mysql", $connect) or die(mysql_error());
$sql = "SELECT * FROM help_category";
$resultat = mysql_query($sql) or die("Неможливо виконати запит!");
mysql_close($connect);
 
echo "Всього записів: ".mysql_num_rows($resultat);
 
?>