PHP

Удобная надстройка над нативным mysql_query на php

Удобная надстройка над нативным 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']);
});

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

Вот и все, надеюсь скрипт сделает Вашу жизнь чуть проще.
Теги:
mysql_query
Добавлено: 02 Мая 2018 13:45:14 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...