Удобная надстройка над нативным mysql_query   Итак, вы уже достаточно давно программируете на php, работаете с БД, добавляете, редактируете, удаляете. Когда делаете это, каждый раз прописываете одни и те же действия: подключение, выбор БД, запрос, выборки и т.д.

   Каждый раз Вы собираете запрос в отдельную переменную, экранируя все входные данные. непременно забывая это сделать с каким-нибудь числом, ведь кому придет в голову подать вместо ?id=123 что-нибудь вроде ?id=delete from ...

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

   В цикле мы также можем выбирать данные различными способами: можем, как объект, тогда к каждому полю обращаемся так $row->id, есть функции которые возвращают ассоциативный массив, тогда обращаемся так $row['id'], а есть те которые просто возвращают массив данных.

   Вы написали программу. Мои поздравления! Она работает. данные крутятся. Вам даже сообщили, что в id можно подавать любые данные, и вы исправили этот баг, в двух местах, конечно забыв про третье. 

   Пришло время протестировать скрипт на хостинге клиента. Страшно сказать, но он ярый противник linux и apache, купил за большие деньги windows хостинг, с IIS и MsSQL. Ну что же, переписываем пару строк, понимаем, что отличий в работе прилично, и пишем все заново...

   Веселая перспектива не правда ли? 

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

<?php
class a{
public $b = 1;
public function getB(){
  return $this->b;
}
}
$v = new a();
echo $v->b; // что может быть проще
echo $this->getB();// очень длинно, к тому же нам пришлось
//прописывать у класса дополнительный метод,
// а это еще 3 дополнительные строчки

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

<?php
class a{
public $b = 1;
public function getB(){
  return file_get_contents('b.txt');
}
}
$v = new a();
echo $v->b; // везде, где применялась эта конструкция придется переписывать код
echo $this->getB();// в программе ничего не изменилось

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

Представляю Вам, собранный мной класс для работы с mysqlСсылка на github

Как использовать

Подключение к БД

include "class.db.php";
$db = new db('localhost','root','','test_bd','');

Простой SQL запрос

$db->query('update #_book set hits=hits+1 where id=12');

Тоже, но менее зависимо от SQL реализации

$db->update('book','hits=hits+1','id=12');

Выборка всех записей из таблицы

$db->getRows('select id from #_book');// вернет массив array(array('id'=>12),array('id'=>13)...)
$db->getRows('select id from #_book','id');// вернет массив array(12,13,...)

 Выборка одной записи

$db->getRow('select id from #_book where id=12');// вернет array('id'=>12)

Вставка  записи

$db->insert('book',array('name'=>'пушкин'));
$db->insert('book',array('name'=>'лермантов'));
$db->insert('book','izdatel="'.$db->escape('гоголь').'"');

Просмотр последнего SQL запроса 

$db->insert('book',array('name'=>'лермонтов'));
echo $db->last();// 'insert into pfx_book set name="лермонтов"'

Идентификатор последней вставленной записи

$db->insert('book',array('name'=>'лермонтов'));
echo $db->insertid();// 145

Сообщение об ошибке

$db->query('select * from #_ebook');
MySQL Debugging

  • SQL.q : select * from pfx_ebook
  • MySQL.e : Table 'codedb.pfx_ebook' doesn't exist
  • MySQL.e.№ : 1146
  • PHP.v : 5.3.13
  • Data : 25.03.2013 13:47
  • Script : /index.php
  • Refer : http://k8/

Ну и еще одна функция на грани фантастики, вызов для каждой записи из выборки callback функции:

$db->each('select id from #_book',function($item,$db){
  $db->update('book','hits=hits+id','id='.$item['id']);
});

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

Вот и все, надеюсь скрипт сделает Вашу жизнь чуть проще.

Оставлять комментарии могут только зарегистрированные пользователи

Комментарии  

Дима
# Дима 18.02.2015 00:21
класс наверное не плохой...только бы разобраться как с ним пользоваться не могу...
Leroy
# Leroy 18.02.2015 09:16
А что конкретно не понятно?
Дима
# Дима 23.04.2015 22:02
конкретные примеру нужны... не доганяю :sigh: новичок
Дима
# Дима 23.04.2015 22:18
на примере какой нибудь таблицы