Библиотеки, Классы, полезные функции.

Discussion in 'PHP' started by Sharky, 29 Sep 2009.

  1. Sharky

    Sharky Elder - Старейшина

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    Выкладываем полезные классы, библиотеки, для облегчения жизни. Так же в теме принимаются просьба на поиски библиотек/классов. Начну первый:

    MultiCurl class library
    Ссылки по классу:
    http://www.weblancer.net/users/tvv/portfolio/231798.html
    http://code.google.com/p/multicurl-library/downloads/list
     
    #1 Sharky, 29 Sep 2009
    Last edited by a moderator: 14 Dec 2009
    2 people like this.
  2. Sharky

    Sharky Elder - Старейшина

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    подскажите perl либу для работы с фтп через socks5
     
  3. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    ftp://ftp.linux.it/debian/pool/main/libi/libio-socket-socks-perl/libio-socket-socks-perl_0.1.orig.tar.gz
     
  4. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    2,041
    Likes Received:
    933
    Reputations:
    199
    Т.к. тема не пользовалась спросом, немного изменил её направление, изменения в первом посте. Продолжу:

    Класс для постраничного вывода из БД:

    PHP:
    <?php 
    class Paging { 

    private 
    $page_size = 10; 
    private 
    $link_padding = 10; 
    private 
    $page_link_separator = ' '; 
    private 
    $next_page_text = 'следующая →'; 
    private 
    $prev_page_text = '← предыдущая'; 
    private 
    $result_text_pattern = 'Показано с %s по %s из %s'; 
    private 
    $page_var = 'p'; 

    private 
    $db; 
    private 
    $q; 
    private 
    $total_rows; 
    private 
    $total_pages; 
    private 
    $cur_page; 

    public function 
    __construct($db, $q='', $page_var='p') 
    { 
        
    $this->db = $db; 
        if (
    $q) $this->set_query($q); 
        
    $this->page_var = $page_var; 
        
    $this->cur_page = isset($_GET[$this->page_var]) && (int)$_GET[$this->page_var] > 0 ? (int)$_GET[$this->page_var] : 1; 
    } 

    public function 
    set_query($q) 
    { 
        
    $this->q = $q; 
    } 

    public function 
    set_page_size($page_size) 
    { 
        
    $this->page_size = abs((int)$page_size); 
    } 

    public function 
    set_link_padding($padding) 
    { 
        
    $this->link_padding = abs((int)$padding); 
    } 

    public function 
    get_page($q='') 
    { 
        if (
    $q) $this->set_query($q); 

        
    $r = $this->db->query( $this->query_paging($this->q) ); 
        
    $this->total_rows = array_pop($this->db->query('SELECT FOUND_ROWS()')->fetch_row()); 

        if (
    $this->page_size !== 0) $this->total_pages = ceil($this->total_rows/$this->page_size); 
         
        if (
    $this->cur_page > $this->total_pages) 
        { 
            
    $this->cur_page = $this->total_pages; 
            if ( 
    $this->total_pages > 0 ) $r = $this->db->query( $this->query_paging($this->q) ); 
        } 
         
        return 
    $r; 
    } 

    public function 
    get_result_text() 
    { 
        
    $start = (($this->cur_page-1) * $this->page_size)+1; 
        
    $end = (($start-1+$this->page_size) >= $this->total_rows)? $this->total_rows:($start-1+$this->page_size); 

        return 
    sprintf($this->result_text_pattern, $start, $end, $this->total_rows); 
    } 

    public function 
    get_page_links() 
    { 
        if ( !isset(
    $this->total_pages) ) return ''; 

        
    $page_link_list = array(); 

        
    $start = $this->cur_page - $this->link_padding; 
        if ( 
    $start < 1 ) $start = 1; 
        
    $end = $this->cur_page + $this->link_padding-1; 
        if ( 
    $end > $this->total_pages ) $end = $this->total_pages; 

        if ( 
    $start > 1 )  $page_link_list[] = $this->get_page_link( $start-1, $start - 2 > 0 ? '...' : '' ); 
        for (
    $i=$start; $i <= $end; $i++)  $page_link_list[] = $this->get_page_link( $i ); 
        if ( 
    $end + 1 < $this->total_pages ) $page_link_list[] = $this->get_page_link( $end +1, $end + 2 == $this->total_pages ? '' : '...' ); 
        if ( 
    $end + 1 <= $this->total_pages ) $page_link_list[] = $this->get_page_link( $this->total_pages ); 

        return 
    implode($this->page_link_separator, $page_link_list); 
    } 

    public function 
    get_next_page_link() 
    { 
        return isset(
    $this->total_pages) && $this->cur_page < $this->total_pages ? $this->get_page_link( $this->cur_page + 1, $this->next_page_text ) : ''; 
    } 

    public function 
    get_prev_page_link() 
    { 
        return isset(
    $this->total_pages) && $this->cur_page > 1 ? $this->get_page_link( $this->cur_page - 1, $this->prev_page_text ) : ''; 
    } 

    private function 
    get_page_link($page, $text='') 
    { 
        if (!
    $text)    $text = $page; 

        if (
    $page != $this->cur_page) 
        { 
            
    $reg = '/((&|^)'.$this->page_var.'=)[^&#]*/'; 
            
    $url = '?'.( preg_match( $reg, $_SERVER['QUERY_STRING'] ) ? preg_replace($reg, '${1}'.$page, $_SERVER['QUERY_STRING']) : ( $_SERVER['QUERY_STRING'] ? $_SERVER['QUERY_STRING'].'&' : '' ).$this->page_var.'='.$page); 
            return 
    '<a href="'.$url.'">'.$text.'</a>'; 
        } 
        return 
    '<span>'.$text.'</span>'; 
    } 

    private function 
    query_paging() 
    { 
        
    $q = $this->q; 

        if (
    $this->page_size != 0) 
        { 
            
    //calculate the starting row 
            
    $start = ($this->cur_page-1) * $this->page_size; 
            
    //insert SQL_CALC_FOUND_ROWS and add the LIMIT 
            
    $q = preg_replace('/^SELECT\s+/i', 'SELECT SQL_CALC_FOUND_ROWS ', $this->q)." LIMIT {$start},{$this->page_size}"; 
        } 

        return 
    $q; 
    } 
    } 
    ?>
    Ссылки по классу:
    /showpost.php?p=1739576&postcount=2
    http://www.tigir.com/paging.htm
     
    _________________________
  5. life_is_shit

    life_is_shit Elder - Старейшина

    Joined:
    21 Aug 2007
    Messages:
    300
    Likes Received:
    149
    Reputations:
    19
    а можно мне хоть глазком глянуть на нормальный Doctrine ORM для codeigniter? :(
    просто мечтаю в поллюционных снах.
     
  6. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    2,041
    Likes Received:
    933
    Reputations:
    199
    Класс для работы с MySQL:
    PHP:
    <?php

    class db
    {
        var 
    $db_id = false;
        var 
    $query_num = 0;
        var 
    $query_list = array();
        var 
    $mysql_error = '';
        var 
    $mysql_error_num = 0;
        var 
    $MySQL_time_taken = 0;
        
        function 
    connect($db_user, $db_pass, $db_name, $db_location = 'localhost', $show_error=1)
        {
            if(!
    $this->db_id = @mysql_connect($db_location, $db_user, $db_pass))
            {
                if(
    $show_error == 1) $this->display_error(mysql_error(), mysql_errno());
                else                 return 
    false;
            } 

            if(!@
    mysql_select_db($db_name, $this->db_id))
            {
                if(
    $show_error == 1) $this->display_error(mysql_error(), mysql_errno());
                else                 return 
    false;
            }

            return 
    true;
        }
        
        function 
    query($query, $show_error=true)
        {

            if(!
    $this->db_id) $this->connect(DBUSER, DBPASS, DBNAME, DBHOST);
            
            if(!(
    $result = mysql_query($query, $this->db_id) ))
            {
                
    $this->mysql_error = mysql_error();
                
    $this->mysql_error_num = mysql_errno();
                
                if(
    $show_error) $this->display_error($this->mysql_error, $this->mysql_error_num, $query);
            }
            
            
    $this->query_num ++;

            return 
    $result;
        }
        
        function 
    get_row($query_result)
        {
            return 
    mysql_fetch_assoc($query_result);
        }

        function 
    get_array($query_result)
        {
            return 
    mysql_fetch_array($query_result);
        }
        
        
        function 
    super_query($query, $multi = false)
        {
            if(!
    $this->db_id) $this->connect(DBUSER, DBPASS, DBNAME, DBHOST);

            if(!
    $multi) return $this->get_row($this->query($query));
            else
            {
                
    $query_result = $this->query($query);
                
                
    $rows = array();
                while(
    $row = $this->get_row($query_result))
                {
                    
    $rows[] = $row;
                }
                
                return 
    $rows;
            }
        }
        
        function 
    num_rows($query_result)
        {
            return 
    mysql_num_rows($query_result);
        }
        
        function 
    insert_id()
        {
            return 
    mysql_insert_id($this->db_id);
        }

        function 
    get_result_fields($result)
        {
            while (
    $field = mysql_fetch_field($result))
            {
                
    $fields[] = $field;
            }
            
            return 
    $fields;
        }

        function 
    close()
        {
            @
    mysql_close($this->db_id);
        }
        
        function 
    display_error($error, $error_num, $query = '')
        {
            if(
    $query)
            {
                
    $query = preg_replace("/([0-9a-f]){32}/", "********************************", $query);
                
    $query_str = "$query";
            }
            
            echo 
    '<?xml version="1.0" encoding="iso-8859-1"?>
            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
            <html xmlns="http://www.w3.org/1999/xhtml">
            <head>
            <title>MySQL Fatal Error</title>
            <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
            <style type="text/css">
            <!--
            body {
                font-family: Verdana, Arial, Helvetica, sans-serif;
                font-size: 10px;
                font-style: normal;
                color: #000000;
            }
            -->
            </style>
            </head>
            <body>
                <font size="4">MySQL Error!</font> 
                <br />------------------------<br />
                <br />
                
                <u>The Error returned was:</u> 
                <br />
                    <strong>'
    .$error.'</strong>

                <br /><br />
                </strong><u>Error Number:</u> 
                <br />
                    <strong>'
    .$error_num.'</strong>
                <br />
                    <br />
                
                <textarea name="" rows="10" cols="52" wrap="virtual">'
    .$query_str.'</textarea><br />

            </body>
            </html>'
    ;
            
            exit();
        }
    }

    ?>
     
    _________________________
  7. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    b3, зверюга )
    Никаких проверок, исключений, никакого ООП, просто обертка стандартных устаревших функций для работы с MySQL своими функциями )
     
  8. VDShark

    VDShark Elder - Старейшина

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    http://highcharts.com/
    JS-библиотека для построения графиков/диаграмм и прочего-прочего со всякими вкусностями =)
    Плотно не юзал, но выглядит удобоваримо.
     
    1 person likes this.
  9. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    2,041
    Likes Received:
    933
    Reputations:
    199
    :D исправлюсь)) Просто перенес с другого раздела тему, и нужно было апнуть =) Но кстати данным классом пользуюсь =) Для тех кому нужен "безопасный" класс могу посоветовать выдрать с DLE, там неплохой =)
     
    _________________________
    1 person likes this.
  10. Shadow_p1raT

    Shadow_p1raT Elder - Старейшина

    Joined:
    9 Mar 2008
    Messages:
    174
    Likes Received:
    93
    Reputations:
    0
    уважаемый nerezus,не могли бы вы выложить настоящий класс для работы с mysql(т.е c OOП,исключениями,проверками)
    P.S хочется глянуть )
     
  11. astrologer

    astrologer Elder - Старейшина

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    in b4 Zend_Db
     
  12. life_is_shit

    life_is_shit Elder - Старейшина

    Joined:
    21 Aug 2007
    Messages:
    300
    Likes Received:
    149
    Reputations:
    19
    b3, джедай хуле=)
    давно пора (по-доброму) переходить на orm или хотя бы active record.
     
  13. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Не вопрос
     
  14. joks

    joks Member

    Joined:
    27 Sep 2008
    Messages:
    16
    Likes Received:
    14
    Reputations:
    0
    PHP:
    jClass: pWeb (Parser Web) - класс для работы с сайтами[/b]

    Предисловаие:

    [
    I]Начинаю потихоньку выкладывать свои классы в этом разделе. Они будут идти с пометкой jClass. Думаю многим кодерам они пригодяться. [/I]

    [
    COLOR=LemonChiffon][CENTER][SIZE=4]jClass: pWeb[/SIZE][/CENTER][/COLOR]

    Это класс для работы с сайтами в скриптах PHP. Он очень удобен для создания всевозможных авторегистраторов, парсеров, спамеров, граберов, брутфорсов итп. Основан на [B]cURL[/B], имеет много полезных возможностей, таких как:
    [list]
    [*]
    Быстрая загрузка страниц методом GET и POST
    [*]Парсинг HTML
    [*]Нахождение любого HTML элемента и получения его аттрибутов (в.т.ч. inputs)
    [*]
    Автоматическое слежение за cookies
    [*]Парсер заголовков
    [*]Автоматическая загрузка каритинок
    [*]Разгадка капчи одной строкой кода, через Antigate
    [*]Ну и еще много чего интересного..
    [/list] 

    [
    URL=http://files.xxxgeneration.ru/files/2010_04_22/c52fb9/pWeb-1.3.rar]Скачать pWeb (версия 1.3) + документация и примеры[/URL] ([I][SIZE=1]http://files.xxxgeneration.ru/files/2010_04_22/c52fb9/pWeb-1.3.rar[/SIZE][/I])


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

    Я использую этот класс в каждом своем проекте, работающем с сайтами. Предоставляю и вам такую возможность.

    [
    SIZE=3][I]Разрешено использовать класс в любых ваших проектах, также продавать его как часть проекта. Одно условие - сохранение копирайта. [/I][/SIZE]

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

    Скоро может выложу еще пару готовых примеров его использования. Пока работы много.

    [
    SIZE=2][COLOR=Green][B]by m0Hze: На отдельную тему не тянет, клади сюда. Флуд почистил, что бы больше такого не было.[/B][/COLOR][/SIZE]
     
    #14 joks, 22 Apr 2010
    Last edited by a moderator: 22 Apr 2010
    2 people like this.
  15. Gaus

    Gaus Member

    Joined:
    8 Feb 2009
    Messages:
    136
    Likes Received:
    36
    Reputations:
    3
    Подскажите Perl класс для работы с SSL через Socks
     
  16. F0R357

    F0R357 New Member

    Joined:
    13 Nov 2005
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Остался у кого-нить? перезалейте плиз?
     
  17. Alekzzzander

    Alekzzzander Elder - Старейшина

    Joined:
    5 Sep 2007
    Messages:
    278
    Likes Received:
    36
    Reputations:
    0
    Ф-ция водяного знака

    PHP:
    function watermark($file, $watermark) {
           if(empty(
    $file) | empty($watermark)) return false;
           
    $wh = getimagesize($watermark);
           
    $fh = getimagesize($file);
           
    $rwatermark = imagecreatefromjpeg($watermark); //Иногда может понадобиться наложить прозрачный png, тогда заменяем функцию на imagecreatefrompng
           
    $rfile = imagecreatefromjpeg($file);
           
    imagecopy($rfile, $rwatermark, $fh[0] - $wh[0], $fh[1] - $wh[1], 0, 0, $wh[0], $wh[1]);
           
    imagejpeg($rfile, $file, '100');
           
    imagedestroy($rwatermark);
           
    imagedestroy($rfile);
           return 
    true;
    }
    Использовать так:
    PHP:
    watermark('1.jpg', '2.jpg');
    1.jpg - исходная картинка
    2.jpg - водяной знак
     
  18. php_casper

    php_casper New Member

    Joined:
    6 Jun 2010
    Messages:
    64
    Likes Received:
    1
    Reputations:
    1
    Давно видел, кто-то вылаживал бесплатный класс для вконтакте. Ткните или выложите сюда пожалуйста.
     
  19. Sharky

    Sharky Elder - Старейшина

    Joined:
    1 May 2006
    Messages:
    487
    Likes Received:
    312
    Reputations:
    46
    ищу рабочий лёгкий (только основные функци, такие как авторизация, приём, отправка сообщений) класс для работы с xmpp
     
  20. necroleptick

    necroleptick Member

    Joined:
    3 Jan 2011
    Messages:
    105
    Likes Received:
    11
    Reputations:
    0
    Мой класс для работы с MySQL

    PHP:
    <?php

    class DB {
        const 
    FETCH_ASSOC = 1;
        const 
    FETCH_NUM = 2;
        const 
    FETCH_BOTH = 3;
        const 
    FETCH_OBJ = 4;
        
        private 
    $query = "";
        private 
    $result = false;
        private 
    $connection;
        private 
    $errors = array(); // стек для хранения ошибок

        /*
         * конструктор класса DB
         * @param $server строка хост
         * @param $username строка имя пользователя
         * @param $password строка пароль пользователя
         * @param $database_name строка имя базы данных
         *
         */
        
    public function __construct($server, $username, $password, $database_name) {
            try {
                
    $this->connection = @mysql_connect($server, $username, $password);
                if (
    $this->connection === false) {
                    throw new 
    Exception("Не удается подключиться к серверу MySQL по адресу '{$server}'");
                }
                else {
                    if (@!
    mysql_select_db($database_name, $this->connection)) {
                        throw new 
    Exception("Неизвестная база данных '{$database_name}'");
                    }
                }
            }
            catch (
    Exception $e) {
                
    // echo $e->getMessage()."<br>";
                
    $this->errors[] = $e->getMessage();
            }
        }
        
        
    // возвращает строку с сообщением об ошибке либо false в случае их отсутствия
        
    public function getError() {
            
    $e = array_shift($this->errors); // берём первый элемент из стека
            
    if (is_null($e)) {
                return 
    false;
            }
            else {
                return 
    $e;
            }
        }
        
        
    // получить массив ошибок
        
    public function getErrors() {
            return 
    $this->errors;
        }
         
        public function 
    setQuery($query) {
            
    $this->query = $query;
            return 
    $this;
        }
         
        
    /*
         * метод для отправки запроса MySQL
         * @param $query строка запрос
         * @return $this указатель
         *
         */
        
    public function exec() {     
            
    $this->result = @mysql_query($this->query, $this->connection);
            if (!
    $this->result) {
                
    $this->errors[] = mysql_error();
            }   
            return 
    $this;
        }
        
        public function 
    query($query) {     
            
    $this->result = @mysql_query($query, $this->connection);
            if (!
    $this->result) {
                
    $this->errors[] = mysql_error();
            }   
            return 
    $this;
        }
        
        public function 
    getResult() {
            return 
    $this->result;
        }
        
        
    /*
         * данный метод отправляет запрос и обрабатывает результат возвращая 
         * массив работает только с оператором select
         * @param $sql строка SQL-команда
         * @param $flag константа (DB::FETCH_NUM|DB::FETCH_ASSOC|DB::FETCH_BOTH|DB::FETCH_OBJ)
         * @return $rows массив
         *
         */
         
    public function getRows($sql, $flag = 3) {
            
    $res = @mysql_query($sql, $this->connection);
            if (
    $res) {
                
    $as_obj = false;
                if (
    $flag == self::FETCH_OBJ) {
                    
    $as_obj = true;
                    
    $flag = 1;
                }
                
    $rows = array();
                while (
    $row = mysql_fetch_array($res, $flag)) {
                    
    // конвертируем массив в объект, если надо
                    
    if ($as_obj) {
                        
    $row = (object) $row;
                    }
                    
    $rows[] = $row;
                }
                return 
    $rows;
            }
            
    $this->errors[] = mysql_error();
            return 
    false;
         }
        
        
    /*
         * метод для экранирования спецсимволов, используемых в SQL
         * @param $str строка строка, которую необходимо экранировать
         * @return строка
         *
         */
        
    public function escape($string) {
            return 
    mysql_real_escape_string($string);
        }

        
    /*
         * метод возвращает последний вставленный id
         * @return число
         *
         */
        
    public function lastInsertId() {
            return 
    mysql_insert_id($this->connection);
        }
        
        private function 
    prepareParams($params) {
            if (
    is_object($params)) { // объект конвертируем в ассоциативный массив
                
    $params = (array) $params;
            }
            foreach (
    $params as &$v) {
                if (
    is_int($v) or is_float($v)) {
                    continue;
                }
                else if (
    is_null($v)) {
                    
    $v = "NULL";
                }
                else if (
    is_bool($v)) {
                    
    $v = ($v) ? "TRUE" : "FALSE";
                }
                else { 
    // остальные типы данных будут приведены к строке
                    
    $v = "'{$v}'";
                }
            }
            return 
    $params;
        }
        
        
    /*
         * методы для конструирования простых SQL-запросов
         *
         */
        
    public function select($what, $table_name) {
            
    $this->query = "select {$what} from {$table_name}";
            return 
    $this;
        }
        
        
    // аргументы: 1) строка, название таблицы; 2) массив либо объект, вставляемый ряд, где ключ массива(свойство объекта) - имя колонки
        // возможна передача простого массива
        
    public function insert($table_name, $params) {
            
    $params = $this->prepareParams($params);
            
    $columns = array_keys($params);
            
    $values = array_values($params);
            unset(
    $params);
            
    $is_assoc = (is_string($columns[0])) ? true : false; 
            
    $this->query = "insert into `{$table_name}`";
            
    // если массив ассоциативный
            
    if ($is_assoc) {
                foreach (
    $columns as &$v) {
                    
    $v = "`{$v}`";
                }
                
    $this->query.= " (".implode(", ", $columns).")";
            }
            
    $this->query.= " values(".implode(", ", $values).")";
            return 
    $this;
        }
        
        public function 
    update($table_name, $params) {
            
    $params = $this->prepareParams($params);
            
    $set = array();
            foreach (
    $params as $k => $v) {
                
    $set[] = "`{$k}` = {$v}";
            }   
            
    $this->query = "update `{$table_name}` set ".implode(", ", $set);
            return 
    $this;
        }
        
        public function 
    delete($table_name) {
            
    $this->query = "delete from `{$table_name}`";
            return 
    $this;
        }
        
        public function 
    where($condition) {
            
    $this->query = $this->query." where {$condition}";
            return 
    $this;
        }
        
        public function 
    limit($x, $y) {
            
    $this->query = $this->query." limit {$x}, {$y}";
            return 
    $this;
        }
        
        public function 
    orderBy($column_name, $key_word = "asc") {
            
    $this->query = $this->query." order by `{$column_name}` {$key_word}";
            return 
    $this;
        }
        
        
    // возвращает сформированную строку запроса
        
    public function getQuery() {
            return 
    $this->query;
        }

        
    // обработать результат запроса и вернуть одномерный массив либо объект
        
    public function fetch($flag = 3) {
            if (
    $this->result === false) {
                return 
    $this->result;
            }
            else {  
                if (
    $flag == self::FETCH_OBJ) {
                    return (object) 
    mysql_fetch_array($this->result, 1);
                }
                return 
    mysql_fetch_array($this->result, $flag);
            }
        }
        
        
    // получаем массив массивов или объектов
        
    public function fetchAll($flag = 3) { 
            if (
    $this->result === false) { 
                return 
    $this->result; 
            } 
            else { 
                if (
    $flag == self::FETCH_OBJ) {
                    
    $as_obj = true;
                    
    $flag = 1;
                }
                
    $rows = array(); 
                
    $n = mysql_num_rows($this->result); 
                for (
    $m = 0; $m < $n; ++$m) {
                    
    $row = mysql_fetch_array($this->result, $flag);
                    
    $rows[$m] = ($as_obj) ? (object) $row : $row; 
                } 
                return 
    $rows; 
            } 
        }

        public function  
    __destruct() {
            @
    mysql_close($this->connection);
        }
    }

    ?>

    Пример использования:

    PHP:
    <?php

    $host 
    = "localhost";
    $user = "root";
    $pass = "";
    $dbname = "test";
    require 
    "classes/db.class.php";
    $db = new DB($host, $user, $pass, $dbname);
    echo 
    "<pre>";
    $db->query(" 
        create table `users` (
            `id` int unsigned not null auto_increment primary key, 
            `name` varchar(255) not null, 
            `password` varchar(255) not null, 
            `date` int not null
        ); 
    "
    );

    $User = new stdClass;
    $User->id = null;
    $User->name = "admin";
    $User->password = md5("123");
    $User->date = time();
    $db->insert("users", $User)->exec();
     
    // можем посмотреть sql-запрос созданный конструктором 
    echo $db->getQuery()."\r\n"; // insert into `users` (`id`, `name`, `password`, `date`) values(NULL, 'admin', '202cb962ac59075b964b07152d234b70', 1294426918)
    var_dump($db->getResult()); // true, можем проверить добавлена ли запись
    var_dump($db->getErrors()); // можем посмотреть ошибки так
    // либо так
    while ($e = $db->getError()) {
        echo 
    $e."\r\n";
    }

    $rows = $db->getRows(" select * from `users` ", DB::FETCH_OBJ);
    var_dump($rows);
    /*
    array(1) {
      [0]=>
      object(stdClass)#3 (4) {
        ["id"]=>
        string(1) "1"
        ["name"]=>
        string(4) "test"
        ["password"]=>
        string(32) "098f6bcd4621d373cade4e832627b4f6"
        ["date"]=>
        string(10) "1294424231"
      }
    }
    */

    ?>

     
    #20 necroleptick, 7 Jan 2011
    Last edited: 24 Mar 2013