Работа с базами данных. Начало.
Для чего и как использовать базу данных. Основные функции.
Всё, что я могу сказать в качестве рекомендации к использованию БД - это то,
что жизнь без них - просто смерть! База данных - луч exe-шного света в тёмном
царстве обработки данных интерпретируемой программой. База данных приносит
немножко головной боли, но снимает гораздо больше.
В качестве примера взят сервер баз данных MySQL (полагаю, что освоив его, вы
без большого труда освоите и другие. Когда-нибудь я напишу и о них, если сам
освою :).
Первый разговор пойдет о функциях PHP, используемых для работы с MySQL. Итак,
начнём.
1. Администрирование базы данных
Способы администрирования БД в порядке убывания удобства:
- phpMyAdmin
(весьма рекомендую!)
- Написать скрипт, который бы передёргивал базу (см. пример)
- mysql.exe в пакете mysql
- mysql_manager.exe (там, вроде, как-то можно, только на грани шаманства)
Особенно рекомендую первый способ. С ним не придётся изучать запросы ALTER
TABLE, ADD COLUMN и т.п. Я их не знаю до сих пор. Тем более, что "такие вопросы,
товарищ посол, с кондачка не решаются" - когда вам понадобится автоматически
изменить структуру базы или таблицы? Пару слов о втором способе. Это так сказать
обходная технология, которую я применял, не зная про phpMyAdmin и утилиту
mysqldump. В скрипте пишутся команды, удаляющие базу и создающие её вновь.
Когда-то помогало, но вообще это, ещё раз скажу, обходная технология,
"подпорка".
На будущее: если у вас будет несколько сайтов, использующих БД, то хотя бы в
пределах домашнего сервера создайте несколько баз. Это облегчит работу серверу и
исключит возможность путаницы таблиц. В общем, правила работы с БД те же, что и
с сайтом - держать в отдельной директории от других.
2. Соединение с сервером БД
...осуществляется при помощи функции mysql_connect: $connect =
mysql_connect(<хост>, <логин>, <пароль>); По умолчанию, на
mysql-сервере в таблице пользователей есть пользователь root, который может
иметь доступ только с localhost-а, то бишь с того же самого компьютера, где
стоит сервер mysql. ВНИМАНИЕ! "Иметь доступ с localhost-а" значит, что доступ
имеет ваш скрипт PHP, а вы можете обращаться к нему с любого другого компьютера.
Что происходит, когда мы вызываем функцию mysql_connect? С началом выполнения
вашего скрипта, php выделяет в своей памяти место для информации о нём и его
переменных. В информации о выполняемом скрипте хранится, в том числе, и
информация о соединениях с базами данных. Переменная $connect - грубо говоря
указатель на место, где данная информация хранится. Переменная эта точно такая
же, как и остальные - если вы используете функции, то надо объявлять глобальные
переменные, чтобы обратиться к ней.
Почему вообще используется переменная? Это на случай, если для работы вам
необходимо использовать несколько серверов баз данных (или, например, для
обеспечения бОльшей безопасности вы используете разные логины, у которых могут
быть разные привилегии). В таких случаях в каждом запросе нужна определённость,
по какому, так сказать, каналу идёт команда. Но если вы используете только одно
соединение, указывать его в параметрах функций запросов (о них - ниже) не нужно
- php находит первое (и в данном случае единственное) установленное соединение и
использует его.
3. Запрос-выборка и обработка результатов
Механизм работы функций запросов к БД такой же, как и у функции соединения:
функции передаются параметры запроса и (если надо) соединения, а результат
записывается в переменную:
$result = mysql_db_query(string база данных, string
запрос [, переменная соединения]); или
$result = mysql_query(string запрос [, переменная
соединения]); ВНИМАНИЕ! Чтобы использовать функцию mysql_query, в которой
база данных не указывается, надо предварительно выбрать используемую базу
данных:
mysql_select_db(string база данных);
Теперь у нас есть переменная $result. Это указатель на результат выполнения
запроса. Там есть сколько-то строк таблицы. Получить эти строки можно через
функции mysql_fetch_row и mysql_fetch_array:
echo "<table>"; while ($row =
mysql_fetch_array($result)) echo "<tr><td>",
$row["field1"], "</td><td>", $row["field2"],
"</td></tr>"; echo "</table>";
Функция mysql_fetch_array выдаёт в указанную переменную (в данном случае
$row) массив, индексы которого - имена полей (причём, если вы в списке полей
запроса пишете table.field, то индекс массива будет field). mysql_fetch_row
выдаёт массив, индексы которого - числа, начиная с 0.
Какой функцией лучше пользоваться? Если вы запрашиваете звёздочку, т.е. все
поля таблицы, а выводить поля нужно в определённой последовательноси (когда,
например, у таблицы рисуется шапка), лучше пользоваться mysql_fetch_array. Если
вы запрашиваете одно-два-три поля, чётко зная их последовательность, можно
делать mysql_fetch_row - это уменьшит объем кода программы.
4. Запросы-действия
Это команды DELETE и UPDATE. Подобные запросы - в "правах" такие же, как и
SELECT, поэтому отправка команды серверу происходит тем же способом -
mysql_query (mysql_db_query). Но в данном случае функция не возвращает
результата:
$result = mysql_query("SELECT * FROM
sometable"); но mysql_query("DELETE FROM sometable WHERE id=...");
Соответственно, если мы выполним запрос-выборку и не запишем результат в
переменную, данные не будут храниться нигде.
5. Обработка ошибок запросов
Сообщение о последней ошибке можно получить через функцию mysql_error:
echo "Ошибка базы данных. MySQL пишет:", mysql_error();
Если результат функции пишется в переменную, можно проверить её:
$result = mysql_query($request); if
(!$result) echo "Ошибка базы данных. MySQL пишет:",
mysql_error(); else { echo
"<table>"; while ($row =
mysql_fetch_array($result)) echo
"<tr><td>", $row["field1"], "</td><td>", $row["field2"],
"</td></tr>"; echo
"</table>"; };
Если в переменную не пишем, то так:
$request = "UPDATE
(...)"; mysql_query($request); if (!mysql_error()) echo
"Обновление данных прошло успешно!"; else echo "Ошибка базы данных. MySQL
пишет:", mysql_error();
Если запрос генерируется автоматически, можно выводить и сам запрос (полезно
создавать переменную, которая бы его содержала, и использовать её в качестве
параметра функции).
Автор: Дмитрий Лебедев
Источник: www.detail.phpclub.net
|