Вход в почту


Каталог статей

Главная » Статьи » уроки

    Классы в MySQL  >  уроки


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


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

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

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


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

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

    select count(*) from `customers`;

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

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

    Забираем и смотрим класс.

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

    Шаг 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.

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

    php
    require("class.mysql.php");

    $host = "localhost";
    $only_db = "test_mysql_class";
    $username = "username";
    $password = "password";

    $db = new mysql_db();

    if(!
    $db->getconnect($host,$only_db,$username,$password)){
    echo
    "net contact :-(";
    exit;
    }else echo
    "yes contact! ;-)";

    ?>

    Если
    у вас появилась надпись "yes contact! ;-)", значит соединение с базой
    данных прошло успешно, можно переходить к изучению класса.

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

    Шаг 3.а

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

    php
    $sql
    = "select count(*) from `customers` ";
    $count = $db->query($sql, 1);
    echo
    $count;
    ?>

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

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

    $count = $db->query($sql, 1);

    написать так:

    $count = $db->query($sql, 0); или просто $count = $db->query($sql);

    также это работает с min(*) и МАХ(*).

    Шаг 3.б.

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

    php
    ...

    $sql = "select `customer_id` from `customers`";
    $sql .= " where `lastname` = 'pupkin' and `surname` = 'vasya' limit 0,1";
    $customer_id = $db->query($sql, 1);
    echo
    $customer_id;
    ?>

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

    Шаг 3.в.

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

    php
    …

    $sql
    = "select `lastname`,`surname` from `customers`";
    $sql .= " where `customer_id` = 1 limit 0,1";
    $obj = $db->query($sql, 1);
    echo
    $obj;
    ?>

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

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

    php
    ...

    $sql = "select `lastname`,`surname` from `customers`";
    $sql .= " where `customer_id` = 1 limit 0,1";
    $obj = $db->query($sql, 1);
    echo
    $obj->lastname;
    echo
    "";
    echo
    $obj->surname;
    ?>

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

    pupkin
    vasya

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

    Шаг 3.г.

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

    php
    ...

    $sql = "select `lastname`,`surname` from `customers` where 1";
    $array = $db->query($sql, 1);
    echo
    $array;
    ?>

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

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

    php
    ...

    $sql = "select `lastname`,`surname` from `customers` where 1";
    $array = $db->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'

    php
    ...

    $sql = "select `orders`.`product_id` as id from ";
    $sql .= "( `orders` left join `customers` on `customers`.`customer_id` = `orders`.`customer_id`)";
    $sql .= "where `customers`.`lastname` = 'mal4ish' ";
    $array = $db->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, конечно это не правильно.

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

    php
    ...

    $sql = "select `product_id` from `orders` where `customer_id` in";
    $sql .= " {select `customer_id` from `customers` where `lastname` = 'mal4ish' } ";
    $array = $db->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

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

    Заключение


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

  •    Получить ссылку

    В новом окне Просмотров:[821]Добавлено:17.06.2025 Подробнее

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]




Создатели u.Tools не несут ответственности за размещаемые материалы. Каждый файл принадежит его создателю.
Сайт оптимизтрован для просмотра в брузерах:Firefox & Opera при разрешении экрана 1280x1024 пикселя.

Главное меню

  • Главная
  • Форум
  • Правила
  • Об uTools
  • Фотографии
  • Обзоры
  • Тематические новости
  • jQuery
  • u.Faq
  • Загрузки
  • Олимпиада
  • Кто нас сегодня посетил


  • Главная | Новости | Загрузки | Вопрос-ответ | Обзоры | Контакты

    © u.Tools
    Хостинг от uCoz

    Служба поддержки


    support@utools.net.ru

    1967426