Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Работа с базами данных. Начало


Автор: Дмитрий Лебедев < >

Работа с базами данных. Начало.
  Для чего и как использовать базу данных. Основные функции.
  Всё, что я могу сказать в качестве рекомендации к использованию БД - это то, что жизнь без них - просто смерть! База данных - луч 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

Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS