Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Интернет технологии -> PHP -> Класс на PHP для работы с MySQL


Класс на PHP для работы с MySQL

Вступление

Никто точно не знает почему, но MySQL и PHP в большинстве web-проектов почти всегда используются вместе. Вроде разработчики PHP включили поддержку и других баз данных, да и MySQL можно использовать не только вместе с PHP. А может просто провайдеры стремясь снизить цену хостинга и привлечь клиентов, включали на серверах поддержку PHP и MySQL и это стало традицией?..

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

Данный класс не претендует на функциональную полноту, но как показывает многолетний опыт, свойств его хватает для многих проектов.

Что хочешь, то и получишь!

Основу класса составляет простой анализатор, собранный на регулярных выражениях. А суть очень проста, мы должны получить результат в той форме, в которой ожидаем.

Ну например, если мы хотим узнать количество клиентов занесенных в базу данных>

SELECT COUNT(*) FROM `customers`;

то ясно, что мы ожидаем число. Класс разбирает запрос к базе данных и на основание запроса, выдает результат.

Но как говориться, лучше один раз увидеть, чем сто раз услышать.

Забираем класс отсюда> http://people.freenet.de/andrejs/mysql/class.mysql.rar (2kB)

Смотрим класс в формате HTML> http://people.freenet.de/andrejs/mysql/class.mysql.html

 

Ну а теперь посмотрим как этот зверь работает.

 

 

Шаг 1.

Откроем новую базу данных и создадим там пару таблиц.

 

CREATE DATABASE `test_mysql_class` ;
CREATE TABLE `customers` (
  `customer_id` smallint(6) NOT NULL auto_increment,
  `lastname` varchar(255) NOT NULL default '',
  `surname` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`customer_id`)
) TYPE=MyISAM AUTO_INCREMENT=4 ;
 
INSERT INTO `customers` VALUES (1, 'Pupkin', 'Vasya');
INSERT INTO `customers` VALUES (2, 'Mal4ish', 'Ploxish');
INSERT INTO `customers` VALUES (3, 'Mal4ish', 'Kibal4ish');

CREATE TABLE `orders` (
  `customer_id` smallint(6) NOT NULL default '0',
  `product_id` smallint(6) NOT NULL default '0',
  KEY `customer_id` (`customer_id`,`product_id`)
) TYPE=MyISAM;
 
INSERT INTO `orders` VALUES (1, 12);
INSERT INTO `orders` VALUES (1, 23);
INSERT INTO `orders` VALUES (1, 34);
INSERT INTO `orders` VALUES (1, 65);
INSERT INTO `orders` VALUES (2, 12);
INSERT INTO `orders` VALUES (3, 33);
INSERT INTO `orders` VALUES (3, 43);
INSERT INTO `orders` VALUES (3, 655);

У нас появилось две таблицы, с клиентами и с их заказами.

Для теста хватит!

Шаг2.

Попытаемся соединиться с базой данных при помощи класса:

getConnect($host,$only_db,$username,$password)){
      echo "Net contact :-(";
      exit;
  }else echo "Yes contact! ;-)
"; ?>

Если у вас появилась надпись

 

Yes contact! ;-)

значит соединение с базой данных прошло успешно, можно переходить к изучению класса.

Внимание! Все примеры будут дописываться в конец первой программы!

Шаг 3.а

И так попробуем узнать, сколько у нас клиентов в базе данных?

query($sql, 1);
echo $count;

?>

Проще не бывает.

Класс проанализировал наш запрос, и понял, что на выход надо послать одно число. Если мы не хотим, что бы отладочная информация печаталась классом, то надо вместо:

$count = $db->query($sql, 1);
написать так:
$count = $db->query($sql, 0); или просто $count = $db->query($sql);
также это работает с MIN(*) и МАХ(*).

Шаг 3.б.

Теперь попробуем узнать какой id номер у нашего клиента, которого зовут Pupkin Vasya

query($sql, 1);
echo $customer_id;
?>

При „разборке“ этого выражения, класс „понял“, что на „гора“ надо выдать только одно число, а именно $customer_id . Почему? Потому, что во-первых мы делаем SELECT только по `customer_id` , a во-вторых и это самое главное, в конце $sql у нас стоит LIMIT 0,1 . Как говориться комментарии излишни.

Шаг 3.в.

 

Ну а теперь попробуем, найти имя и фамилию клиента зная его id.

query($sql, 1);
echo $obj;

?>

ну и что мы получим?

Object

Да, мы получили обьект. Но у этого обьекта есть нужные нам свойства,

Да, мы получили обьект. Но у этого обьекта есть нужные нам свойства, А именно `lastname` и `surname` ,а это то, что нам надо!

query($sql, 1);
echo $obj->lastname;
echo "
"; echo $obj->surname; ?>

Теперь мы получили:

Pupkin
Vasya

что нам и было надо!

Шаг 3.г.

А теперь мы захотим получить все имена клиентов из базы данных.

query($sql, 1);
echo $array;
?>

И что мы получили на выходе? Массив!

Array

Но это массив обьектов, нам нужно только их перелистать и получить все имена!

query($sql, 1);
if(is_array($array))
   foreach ($array as $obj)
            echo $obj->lastname." ".$obj->surname."
"; ?>

Вот они наши клиенты:

Pupkin Vasya
Mal4ish Ploxish
Mal4ish Kibal4ish

Шаг4.

Казалось бы всего перечисленного могло бы хватить, но... . Если нам понадобиться получить все продукты которые заказали клиенты с фамилией Mal4ish ? Конечно проблем нет, так как MySQL не все вложенные SQL запросы поддерживает, то SQL запрос будет следующим: SELECT `orders`.`product_id` AS id FROM ( `orders` LEFT JOIN `customers` ON `customers`.`customer_id` = `orders`.`customer_id`)WHERE `customers`.`lastname` = 'Mal4ish'

query($sql, 1);
if(is_array($array))
   foreach ($array as $obj)
            echo $obj->id."
"; ?>

Но для некоторых это сложно и непонятно, а иногда такой запрос составить просто невозможно.

Что делать? Надо перевести комманды которые мы хотим выполнить в тот формат, который понимает MySQL.

Ну например SQL запрос можно было бы написать так:

SELECT `product_id` FROM `orders` WHERE `customer_id`
IN(SELECT `customer_id` FROM `customers` WHERE `lastname` = 'Mal4ish')

Только не пробуйте пропустить это через MySQL, конечно это не правильно.

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

query($sql, 0);
if(is_array($array))
   foreach ($array as $obj)
            echo $obj->product_id."
"; ?>

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

Yes contact! ;-)

---- SQL

SELECT `product_id` FROM `orders` WHERE `customer_id` IN {SELECT `customer_id` 
FROM `customers` WHERE `lastname` = 'Mal4ish' } 


---- IN SQL

SELECT `customer_id` FROM `customers` WHERE `lastname` = 'Mal4ish' 


---- SQL

SELECT `product_id` FROM `orders` WHERE `customer_id` IN (2,3) 

12
33
43
655

Результат совпадает с ожидаемым!

Заключение

Вкратце все. Класс как класс, пользуйтесь на здоровье! Надо только следить за синтаксисом, и за пробелами, что бы регулярные выражения поняли, что вы хотите.

Если вы заметите ошибки, или у вас появяться предложения по модификации класса, то обращайтесь ко мне, Андрей Наумов

Также спасибо моему турецкому коллегеDeniz Burucu из фирмы Boreksystems за помощь в тестирование класса.

Автор: Андрей Наумов

Ссылки по теме
Чтение почты через Web-интерфейс
Полезные скрипты на PHP
PHP и формы
Почтовые функции в РНР
Отправка электронной почты с помощью PHP
 

Компьютерная документация от А до Я - Главная

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100