68924

Функції РНР для роботи з MYSQL

Лекция

Информатика, кибернетика и программирование

Всі параметри функції є необов’язковими, оскільки значення за умовчанням можна прописати в конфігураційному файлі php.ini. Якщо ви хочете вказати інші ім’я MySQL-вузла, ім’я користувача і пароль, ви завжди можете це зробити. Параметр $hostname може бути вказаний у вигляді вузол: порт.

Украинкский

2014-09-27

100 KB

0 чел.

Лекція № 17

Тема: Функції РНР для роботи з MYSQL

План

  1.  З’єднання РНР-сценаріїв з таблицями MySQL
  2.  Вибір бази даних
  3.  Обробка помилок
  4.  Виконання запитів до БД
  5.  Обробка результату запиту
  6.  Отримання інформації про результат

З'єднання РНР-сценаріїв з таблицями MYSQL

Основною функцією є mysql_connect(), яка підключає наш сценарій до сервера баз даних і виконує авторизацію користувача.

mysql_connect([string $hostname] [, string $user]

[, string $password])

Всі параметри функції є необов'язковими, оскільки значення за умовчанням можна прописати в конфігураційному файлі php.ini. Якщо ви хочете вказати інші ім'я MySQL-вузла, ім'я користувача і пароль, ви завжди можете це зробити. Параметр $hostname може бути вказаний у вигляді вузол: порт.

Функція повертає ідентифікатор (типу int) з'єднання, вся подальша робота здійснюється тільки через цей ідентифікатор. При наступному виклику функції mysql_connect() з тими ж параметрами нове з'єднання не буде відкрито, а функція поверне ідентифікатор існуючого з'єднання.

Для закриття з'єднання призначена функція mysqI_close(int Sconnection_id). З'єднання можна не закривати — воно буде закрито автоматично при завершенні сценарію. Якщо ви використовуєте більш за одне з'єднання, при виклику mysqI_close() потрібно вказати ідентифікатор з'єднання, яке ви хочете закрити. Знову ж таки, ви можете зовсім не закривати з'єднання — вони будуть закриті автоматично при завершенні сценарію, але пам'ятаєте, що це поганий стиль, тому краще всього закрити з'єднання самостійно.

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

Функція mysql_connect() встановлює звичайне з'єднання з базою даних. Проте PHP дозволяє створювати так звані постійні з'єднання — для цього використовується функція mysql_pconnect(). Параметри у цієї функції такі ж, як і у mysql_connect().

У чому ж різниця між звичайним і постійним з'єднанням? Постійне з'єднання не закривається після завершення роботи сценарію, навіть якщо сценарій викликав функцію mysql_close(). З'єднання «прив'язується» до PID нащадка Apache (від імені якого воно і працює) і закривається лише тоді, коли віддаляється процес-власник (наприклад, перезавантаження або завершення роботи сервера Apache).

PHP працює з постійними з'єднаннями приблизно так: при виклику функції mysql_pconnect() PHP перевіряє, чи було раніше встановлено з'єднання. Якщо так, то повертається його ідентифікатор, а якщо немає, відкривається нове з'єднання і також повертається ідентифікатор.

Недоліків у постійних з'єднань практично немає. Постійні з'єднання дозволяють значно понизити навантаження на сервер, а також підвищити швидкість роботи сценаріїв, що використовують базу даних.

При роботі з постійними з'єднаннями потрібно стежити, щоб максимальне число клієнтів Apache не перевищувало максимального числа клієнтів MYSQL, тобто параметр MaxCIient (у файлі httpd.conf) повинен бути менше або рівний параметру max_user_connection (параметр MYSQL).

Вибір бази даних

Функція mysql_select_db(string $db [, int $id]) вибирає базу даних, з якою працюватиме сценарій. Якщо відкрито не більш за одне з'єднання, можна не указувати параметр $id.

Приклад підключення до бази даних:

// Намагаємося встановити з'єднання

if(!mysql_connect($SERVER,$USER,$PASSWD))

{

echo "He можу підключитися до сервера";

exit;

}

// Вибираємо базу даних

mysql_select_db($DB);

Обробка помилок

Якщо відбудеться помилка, ми отримаємо повідомлення "Не можу підключитися до сервера" і все: сценарій завершить свою роботу. Не дуже-то зручно. Перш за все, для себе, тобто для відладки свого сценарію, можна використовувати дві функції:

mysql_errno(int $id) mysql_error(int $id)

Перша функція повертає номер помилки, а друга — повідомлення про помилку. Замість тривіального повідомлення зручніше використовувати наступне:

echo "ERROR ".mysql_errno()." ".mysql_error()."\n";

Тепер вам не потрібно ворожити, із-за чого відбулася помилка — ви відразу побачите повідомлення про помилку.

Виконання запитів до бази даних

Всі запити до поточної бази даних відправляються функцією mysql_query(). Цій функції потрібно передати один параметр — текст запиту. Текст запиту може містити пробільні символи і символи нового рядка (\n). При цьому текст повинен бути складений за правилами SQL.

Приклад запиту:

$r=mysql_query("select * from hbd");

Наступний запит повинен повернути вміст таблиці hbd. Результат запиту привласнюється змінною $г. Результат — це набір даних, який після виконання запиту потрібно обробити певним чином.

Обробка результату запиту

Якщо запит за допомогою функції mysql_query() успішно виконався, то в результаті клієнт отримує набір записів, який може бути оброблений наступними функціями:

mysql_resuIt() — отримати потрібний елемент з набору записів;

mysqI_fetch_array() — занести запис в масив;

mysql_fetch_row() — занести запис в масив;

mysql_fetch_assoc() — занести запис в асоціативний масив;

mysql_fetch_object() — занести запис в об'єкт.

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

$r=mysql_query("select * from hbd");

echo "B таблиці hbd ".mysql_num_rows(Sr)." записів";

Запис складається з полів (грубо кажучи — колонок). Дізнатися, скільки полів містить кожен запис результату, дозволяє функція mysql_num_fieIds():

$r=mysql_query("select * from hbd");

echo "В таблиці hbd ".mysql_num_fields($r)." полів";

Ми вже можемо отримати кількість записів і кількість полів таблиці. Нам залишилося дізнатися значення кожного поля. Це можна зробити за допомогою mysqI_result(int $resuIt, int $row, mixedSfieId). Параметр $row задає номер запису, а $field — ім'я або порядковий номер поля.

Припустимо, що наш запит повернув наступний набір даних:

Email FirstName LastName

ivan@mail.ru Ivan Ivanov

sid@mail.ru Petr Sidorov

Вивести його в браузер дозволяє наступний код:

$rows = mysql_num_rows($r); $cols = mysql_num_fields($r);

echo "<PRE>";

for ($i=0; $i<$rows; $i++) {

for (j=0; $j<$cols; $j++)

echo mysql_result($r, $i, $j)."\t"; echo "\n";

}

echo "</PRE>";

Варто відзначити, що функція mysql_result() універсальна: знаючи кількість записів і кількість полий, можна «обійти» весь результат, але в теж час ця функція достатньо повільна. Тому для обробки великих наборів записів рекомендується використовувати функції, що мають в середині _fetch_, а саме, mysql_fetch_row(), mysql_fetch_array(), і т.д.

Функція mysql_fetch_row(int $res) отримує відразу весь рядок, відповідний поточному запису результату $res. Кожен наступний виклик функції переміщає покажчик запиту на наступну позицію (як при роботі з файлами) і отримує наступний запис. Якщо більше немає записів, то повертається значення false.

Приклад використання:

$r=mysql_query("select * from hbd where month=\"$bd_m\" and

day=\"$bd_d\");

for ($i=0; $i<mysql_num_rows($r);

{

$f=mysql_fetch_row($r);

echo $f;

}

Примітка. Звернете увагу на рядок запиту — текстові значення полів обов'язково повинні бути в лапках — це вимога MYSQL.

Використовувати функцію mysql_fetch_row() не завжди дуже зручно, оскільки значення всіх полів одного запису знаходяться все в одному рядку. Набагато зручніше використовувати функцію mysql_fetch_array(), що повертає асоціативний масив, ключами якого будуть імена полий.

Примітка.

Функція mysql_fetch_array(int $res [, int Sresult_type]) повертає не асоціативний масив, а масив, заданий необов'язковим параметром $result_type.

Параметр $resuly_type може приймати значення:

MYSQL_ASSOC — повертається асоціативний масив;

MYSQL_NUM — повертається масив з числовими індексами (як у функції mysql_fetch_row());

MYSQL_BOTH — повертається масив з подвійними індексами, тобто ви
можете працювати з ним, як з асоціативним масивом і як із списком.
MYSQL_BOTH — це значення за умовчанням параметра Sresult_type.

У PHP є одна функція, яка повертає «чистий» (з одним індексом) асоціативний масив, — mysql_fetch_assoc(int Sres). Ця функція - просто синонім для mysql_fetch_array(Sres, MYSQL_ASSOC).

Приклад використання функції mysql_fetch_array():

$r=mysql_query("select * from hbd where month=\"$bd_m\" and

day=\"$bd_d\");

for ($i=0; $i<mysql_num_rows($r); $i++)

{

$f=mysql_fetch_array($r);

echo "$f[email]$f[name] $f[month] $f[day] $f[sex] <br>";

}

Як бачите, використовувати функцію mysql_fetch_array() набагато зручніше, ніж mysql_fetch_row().

Отримання інформації про результат

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

Функція mysql_field_name(int Sresult, int Soffset) повертає ім'я поля, що знаходиться в результаті $result з номером $offset (нумерація починається з 0). Іншими словами, функція повертає ім'я поля з номером $offset.

Функція mysql_field_type(int $result, int Soffset) повертає тип поля з номером $offset в результаті $result (номер задається щодо результату, а не таблиці).

Функція mysqI_field_flags(int $result, int $offset) повертає перераховані через пропуск прапори (модифікатори), які є у поля з номером $offset. Всі підтримувані MYSQL прапори представлені в табл.

Прапор

Опис

not_Null

Поле не може містити невизначеного значення (NULL), тобто поле повинне явно ініціалізувати

Primary_Key

Поле буде первинним ключем — ідентифікатором запису, по якому можна однозначно ідентифікувати запис

auto_increment

При вставці нового запису значення цього поля буде автоматично збільшено на одиницю, тому в таблиці ніколи не буде двох записів з однаковим значенням цього поля

UniqueJ<ey

Поле повинне містити унікальне значення

Multipie_Key

Індекс

Blob

Поле може містити бінарний блок даних

Unsigned

Поле містить беззнакові числа

Zerofill

Замість пропусків використовуються символи з кодом \0

Binary

Поле містить двійкові дані

enum

Поле може містити один елемент з декількох можливих (елемент перерахування)

timestamp

У полі автоматично заноситься поточна дата і час при його модифікації

Функція mysql_field_flags() повертає прапори у вигляді рядка, в якому прапори розділяються пропусками.

Зараз розглянемо повноцінний приклад виведення вмісту таблиці і оформлення у вигляді таблиці HTML (див. лістинг ):

Лістинг. Виведення вмісту таблиці БД у вигляді HTML-таблиці

<?

$SERVER = "localhost"; $USER = "user"; $PASSWD = "12345"; $DB = "my_db";

// Підключаємося

if ( !mysql_connect($SERVER,$USER,$PASSWD) )

{

echo $HEAD;

echo $CP;

echo $BODY;

echo "<h2>$ERROR</h2>";

echo "</body></html>";

exit;

// Вибираємо базу даних mysql_select_db($DB);

// Виводиться заголовок таблиці

echo "<table border=l width=100% bgcolor=gold>"; echo "<tr><td>E-mail</td><td>MMH</td><td>MecHU</td>"; echo "<td>Чиcлo</td><td>Пoл</td></tr>";

// Запит select * from hbd $r=raysql_query("select * from hbd");

// Виводимо таблицю

for ($i=0; $i<mysql_num_rows($r); $i++)

{

echo "<tr>";

$f=mysql_fetch_array($r);

echo "<td>$f [email]</tdxtd>$f [name]</tdXtd>$f[month]</td>"

echo "<td>$f[day]</tdxtd>$f[sex]</td>" ;

echo "</tr>";

}

echo "</table></body></html>"

?>

Мал. Виведення сценарію, що відображає таблицю

Ще одна корисна функція, яка може пригодиться в нагоді вам при написанні ваших сценаріїв, — це функція mysql_list_tables(string $db [, int connect_id]). Функція повертає ідентифікатор результату (одна колонка), що містить імена всіх таблиць у вказаній базі даних. Другий параметр, як завжди, це ідентифікатор з'єднання:

$r = mysql_list_tables("hbd");

while($row = mysql_fetch_row($r))

{

echo $row."\n";

}


 

А также другие работы, которые могут Вас заинтересовать

21101. Трипільська культура 18.72 KB
  Трипільська культура. Найбільшого розвитку в цей час в добу енеоліту досягла трипільська культура названа так від с. Потретє за своїм походженням трипільська культура хоч і була повязана з БалканоНижньодунайським регіоном але в процесі поширення на нові східні території включала в себе на різних етапах елементи місцевих неолітичних та енеолітичних культур. Почетверте трипільська культура відзначається розташуванням поселень певними зосередженими групами з проміжними менш заселеними територіями.
21102. Кімерійці, скіфи, сармати, їх культура та світогляд 19.74 KB
  Але історичні відомості про скіфів містяться в іноземних джерелах. Одним із перших про скіфів написав Геродот який присвятив їм окрему книгу своєї Історії і не лише яскраво змалював побут і звичаї тих народів які заселяли українські землі під назвою скіфів а й навів дані про їх релігійні погляди міфологію. У випадку скіфів такою ознакою послужила характерна форма півсферичних посудинчаш характерних для кочівників і більш позаднього часу. Поховання кочівницьких скіфів відрізняються від поховань осідлого населення.
21103. Давньогрецька культура на теренах України 15.24 KB
  Північне Причорноморя входило до сфери колонізації руху греків яких привертали сюди родючі землі велика кількість риби в гирлах річок можливість вести широку торгівлю з племенами північних причорноморських степів скіфами синдами меотами та ін. Античні міста Північного Причорноморя жили самостійним життям зберігаючи проте торгові та культурні звязки зі своїми метрополіями. Велику роль в їх економічному житті відігравала торгівля з містами Греції та Малої Азії а також з племенами причорноморських степів. В містах Північного...
21104. Язичницька культура давніх слов’ян 22.85 KB
  Язичницька культура давніх словян. Релігійні вірування давніх словян давно привертають пильну увагу дослідників. Однак жодну з сучасних реконструкцій світу давньословянських вірувань не можна вважати остаточно доведеною. А подруге кожне словянське племя імовірно визнавало своїх богів культ яких не поширювався на значні території.
21105. Фольклор, музика, побут за часів Київської Русі 18.83 KB
  Фольклор музика побут за часів Київської Русі. Культура часів Київської Русі не була явищем однорідним уніфікованим для всіх регіонів держави яка обіймала великі території від Чорного до Білого морів населені цілком різними племенами. Вельми показовою ілюстрацією розбіжностей у релігійних уявленнях населення різних регіонів Київської Русі може служити поховальний обряд який суттєво відрізнявся навіть у найближчих сусідів що складали етнічне ядро держави у полян та древлян. Протягом тисячолітньої історії християнства на Русі церква...
21106. Освіта за часів Київської Русі 16.49 KB
  Освіта за часів Київської Русі. Перші школи на Русі зявилися за часів великого князя Володимира Святославовича початок XI ст. Основою руської літературнописемної мови як вважають вчені стала говірка мешканців княжої столиці що перепліталася з говірками прибульців з інших земель Русі дружинників ремісників купців. Що до давньоруської живої мови то фахівці вважають що на території Русі існували кілька надплемінних територіальних діалектів.
21107. Література Київської Русі 20.63 KB
  Література Київської Русі. Великого значення і значного розвитку в культурі Київської Русі набуває література. У багатьох давньоруських творах дослідники знаходять риси пізніше характерні тільки для української живої мови при цьому самі ці твори часто неодноразово переписувалися в інших землях Київської Русі. Ним зумовлюється зміст більшості пам'яток літератури Київської Русі.
21108. Літописи доби Київської Русі 20.54 KB
  Літописи доби Київської Русі. До оригінальних пам'яток давньоруської літератури та історіографії відносяться літописи. У цілому давньоруські літописи становлять собою надзвичайно цінне історичне джерело з якого можемо дізнатися про деякі подробиці подій і процесів більше ніде не висвітлених. Однак у тексти літописних зведень часто вносилися зумовлені політичною кон'юнктурою зміни так що при зміні політичного курсу чи ситуації літописи повністю переписувалися інколи поспішно а подекуди можливо і грунтовно.
21109. Архітектура за часів Київської Русі 28.45 KB
  Тому одразу ж після хрещення Русі зявляються й перші церкви: Василівська побудована з дерева за зразком храму в Корсуні і Десятинна або Богородицька перша камяна церква у Києві. Подальші реставрації та ремонті роботи не врятували цього храму який порівняно скоро перетворився на купу будівельного брухту. Красу храму створювала гармонія його форми в цілому яка мала символізувати гармонію світобудови створеної з хаосу Божим Словом. Головним структурним елементом храму був його центральний купол що розташовувався на восьмикутному або...