А это клавиатура, с помощью которой я творю...
http://kurepin.ru/php/mysql/
Rambler's Top100
Пишем на PHP: mysql.class

Хорошее у меня сегодня настроение, поэтому будем изучать самый бестолковый класс нашего проекта — класс, обслуживающий контакты с базой данных.

На самом деле, все три первых наших класса (vars, mysql, utils) можно один раз внимательно и с расстановкой написать, а потом просто пользоваться ими во всех остальных своих проектах. Но если в переменных окружения могут быть какие-то перемены, как и в обслуживающих утилитах, то в классе mysql нам вряд ли что-то когда-то придется менять, разве что, — реквизиты доступа к базе (логин, пароль...).

Я вам даже так скажу (ну точно, замечательное у меня сегодня настроение), вы можете вообще не напрягаться и особенно не разбираться в том, что я сейчас напишу. То есть, понять все это, безусловно, вам придется (иначе, на фига я все это пишу), но сразу после прочтения вы имеете полное право забыть все это как страшный сон — не так важно.

Итак. Давайте разбираться, какие основные функции нам нужны при работе с базой MySQL?

Как человек знающий, я легко отвечу на этот вопрос.

Во-первых, нам нужна процедура подключения к базе. Ее еще можно назвать процедурой авторизации или активации соединения. Или, как говорят программисты, "открытие соединения с базой".

Во-вторых, нам нужна возможность оформить запрос в базу и механизм исполнения этого запроса.

В-последних, за собой надо прибирать. Закрытие соединения.

Все, по большому счету.

    Вот на этом месте я вас должен предупредить. Дело в том, что тот метод общения с базой, который напишем мы, не универсален. Благодаря нашим функциям, можно будет одновременно работать только с одним запросом к базе. Есть случаи, когда это не очень удобно. Но мне это никогда не мешало. В конце концов, всегда можно за несколько минут добавить недостающую функцию.


Итак, давайте перейдем к делу. Я бы не стал повторять — как оформлять новый класс, но сегодняшний класс имеет одно малозаметное, но очень важное отличие от предыдущего (vars): класс class_mysql рождается от класса class_vars. То есть class_vars, являясь родительским к классу class_mysql, передает ему все свои возможности. В нашем случае, это значения тех переменных, которые мы описали на прошлом занятии.

Открываем (создаем) новый файл class_mysql и пишем в нем:

<?

 require("/home/roma/req/vars.class");

 class class_mysql extends class_vars

Видите, прежде всего, мы должны указать, что для нам для работы необходим файл "/home/roma/req/vars.class", т.к. в нем содержится фрагмент нашей программы, описывающий родительский class_vars.

Затем, мы объявляем новый класс. Объявляем его точно так же, как и class_vars, только дописываем в конце строки ссылку на родительский класс: extends class_vars.

Помните, я рассказывал вам, как наследуются классы в PHP? Вот это тот самый случай.

Теперь перейдем к телу класса, и сначала добавим нужные нам переменные.

  var $sql_login="roma";
  var $sql_passwd="parol";
  var $sql_database="roma";
  var $sql_host="127.0.0.1";

  var $conn_id;
  var $sql_query;
  var $sql_err;
  var $sql_res;


В первых четырех переменных мы определили реквизиты доступа к базе MySQL: регистрационное имя (логин), пароль, название нашей базы и IP-адрес, по которому физически располагается MySQL.

Эти четыре переменные мы вполне можем перенести в класс vars, но я этого предпочитаю не делать. Почему? Ну, бывают такие случаи, когда мы доверяем управление нашим сайтом кому-то еще. При этом, мы можем дать этому человеку отдельный доступ именно к файлу с переменными, чтобы он мог влиять на манеру поведения и внешний вид нашего сайта. Но не всегда при этом мы даем ему доступ к самим скриптам и не сообщаем наших реквизитов для доступа к БД.

Вторые четыре переменные мы будем активно эксплуатировать в нашей работе.

Первая из них ($conn_id) — это идентификатор соединения. Он несет в себе информацию о полученном соединении к базе.

Вторая (sql_query) — строка запроса. В нее мы будем помешать наш запрос к БД, прежде чем его активировать.

Третья (sql_err) — код ошибки. Сервер MySQL, как и любая друга программа, может давать различные сбои как по своей вине, так и по нашей: когда наш запрос написан с ошибками. Вот эта переменная и будет работать у нас "флагом", который будет "подниматься", если произошла какая-то ошибка.

А четвертая переменная (sql_res) будет содержать в себе полученную информацию из базы данных после выполнения запроса. Из этой переменной мы будем извлекать эту информацию удобным нам способом.

Замечательно. Других переменных нам тут пока не понадобится, переходим к функциям.


    Вынужден с этого момента помещать куски исходников в текстовые блоки типа textarea, иначе они просто не влезут в формат моего сайта: либо расползется дизайн, либо будут переносы строк. И то, и другое — вредно для восприятия информации. Я постараюсь прилично все это оформить (прошу прощения у пользователей Netscape Navigator за то, что Нетскейп так и не научился нормально отрабатывать стили).

Функция подключения к базе данных.

Поясню построчно:

. заголовок функции с названием

. открывающая фигурная скобка

. присваиваем переменной $conn_id идентификатор подключения к базе. Подключение производит функция PHP mysql_connect, которой в качестве параметров передаются: адрес хоста (компьютера с MySQL-сервером, логин и пароль).

. выбираем базу данных, с которой будем работать. Выбор производится функцией MySQL mysql_select_db, которой в качестве параметра и передается название нашей базы данных.

. закрывающая фигурная скобка.

Понятно, что мы сделали? Мы подключились к серверу MySQL, используя свои реквизиты, после чего, выбрали интересующую нас базу данных. В $conn_id останется идентификатор нашего соединения, он нам пригодится в следующих двух функциях.

Функция, выполняющая наш запрос к БД:


Ну, тут совсем все просто.

Первая строка (в теле функции) выполняет отправку запроса (функция PHP mysql_query), а результат помещает в объявленную нами переменную $sql_res.

Вторая строка запрашивает код ошибки выполнения SQL-запроса (функция PHP mysql_error) и записывает ее в другую переменную, которую мы с вами тоже определили заранее — $sql_err.

Вот такая простая функция. Как видите, PHP очень много делает за нас. На языке C это выглядело бы настолько страшно, что даже показывать это не стану, чтобы не отбить у вас вкус к изучению программирования.

Нам осталось реализовать последнюю, на текущий момент, функцию класса class_mysql. Нам осталось зарыть наше соединение с сервером MySQL.

Закрываем.

По-моему, тут даже комментировать нечего.

Ну ладно. Функция языка PHP mysql_close получает в качестве параметра идентификатор открытого соединения и закрывает это самое соединение.

Все. Закрывайте оставшиеся тэги и сохраняете файл. Он у вас должен выглядеть вот так:

За исключением, разумеется, реквизитов подключения к _вашей_ базе данных MySQL.

"Финита ля комедия", — как говорят в театре. До следующих встреч!

[шаг назад] [печатать] [в начало сайта]



copyright ©2000-2017 Ruslan Kurepin