Current File : //home/strato/chroot/opt/RZphp74/includes/doc/DB_QueryTool/docs/examples/example.php
<?php
// +----------------------------------------------------------------------+
// | PHP Version 4                                                        |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2003 The PHP Group                                |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license,      |
// | that is bundled with this package in the file LICENSE, and is        |
// | available at through the world-wide-web at                           |
// | http://www.php.net/license/2_02.txt.                                 |
// | If you did not receive a copy of the PHP license and are unable to   |
// | obtain it through the world-wide-web, please send a note to          |
// | license@php.net so we can mail you a copy immediately.               |
// +----------------------------------------------------------------------+
// | Author:  Wolfram Kriesing, Paolo Panto, vision:produktion <wk@visionp.de>
// +----------------------------------------------------------------------+
//
// $Id: example.php,v 1.1 2004/05/04 14:09:27 quipo Exp $
//

//ini_set('include_path',realpath(dirname(__FILE__).'/../../../').':'.realpath(dirname(__FILE__).'/../../../../includes').':'.ini_get('include_path'));
    require_once 'DB/QueryTool.php';

    
    // change this!!!!! and the DSN to your DB
    $DB_BACKEND = 'pgsql';
    $DB_BACKEND = 'mysql';



    define ('TABLE_TIME',   'time');
    // the mysql setup!
    if ($DB_BACKEND == 'mysql') {
        $dbDSN = 'mysql://root@localhost/test';
        define ('TABLE_USER',   'user');
    }

    // postgreSQL setup, use PEAR::DB >1.4b1
    if ($DB_BACKEND == 'pgsql') {
        $dbDSN = "pgsql://test:test@/test";
        define ('TABLE_USER',   'uuser');     // user is a reserved word in postgres
    }

                            
    class user extends DB_QueryTool
    {
        var $table =        TABLE_USER;
        var $sequenceName = TABLE_USER;

        // this is default, but to demonstrate it here ...
        var $primaryCol =   'id';

        /**
        *   this table spec assigns a short name to a table name
        *   this short name is needed in case the table name changes
        *   i.e. when u put the appl on a providers db, where you have to prefix
        *   each table, and you dont need to change the entire appl to where you refer
        *   to joined table columns, for that joined results the short name is used
        *   instead of the table name
        */
        var $tableSpec = array(
                                array('name'    =>  TABLE_USER, 'shortName' =>  'user')
                                ,array('name'   =>  TABLE_TIME, 'shortName' =>  'time')
                            );


    }



    // this set an error-callback method, which will be called in case something really went wrong
    // you can use 'setErrorLogCallback' to define the callback method for log-messages - non critical.
    // and you can use 'setErrorSetCallback' to define a callback for errors which prevent the query
    // from properly executing
    $user = new user( $dbDSN , array('errorCallback'=>'myPrint') );
    //$user->setErrorCallback('myPrint'); this could be used too


    //
    //      1
    //
    // get a single entry with a given 'id'
    headline('$user->get(3)');
    $user->reset();     // reset the query-builder, so no where, order, etc. are set
    $res = $user->get(3);
    myPrint($res);
    // query: SELECT * FROM user WHERE id=3


    //
    //      2
    //
    // get all entries from the table
    headline('$user->getAll()');
    $user->reset();     // reset the query-builder, so no where, order, etc. are set
    $res = $user->getAll();
    myPrint($res);
    // query: SELECT * FROM user


    //
    //      3
    //
    // get the first 10 entries from the table (LIMIT 0,10)
    headline('$user->getAll(0,10)');
    $user->reset();     // reset the query-builder, so no where, order, etc. are set
    $res = $user->getAll(0,10);
    myPrint($res);
    // query: SELECT * FROM user LIMIT 0,10


    //
    //      4
    //
    // get all data where the id>3
    headline('using setWhere');
    $user->reset();     // reset the query-builder, so no where, order, etc. are set
    $user->setWhere('id>3');
    $res = $user->getAll();
    myPrint($res);
    // query: SELECT * FROM user WHERE id>3


    //
    //      5
    //
    // setting multiple query-parts
    headline('using set[Where,Order,Group]');
    $user->reset();     // reset the query-builder, so no where, order, etc. are set
    // for proper SQL92 i think we need to select only the col we use in group
    // in mysql you can also leave out the following line
    $user->setSelect('name');
    $user->setWhere('name IS NOT NULL');
    $user->setOrder('name');
    $user->setGroup('name');
    $res = $user->getAll();
    myPrint($res);
    // query: SELECT * FROM user WHERE name IS NOT NULL GROUP BY name ORDER BY name


    //
    //      6
    //
    // setting multiple query-parts
    headline('using setIndex');
    $user->reset();     // reset the query-builder, so no where, order, etc. are set
    $user->setIndex('name');
    $res = $user->getAll();
    myPrint($res);
    // query: SELECT * FROM user
    // the result-array is indexed by 'name'



    //
    //      7
    //
    // setting multiple query-parts
    headline('using setIndex using 2 columns!');
    $user->reset();     // reset the query-builder, so no where, order, etc. are set
    $user->setIndex('name,surname');
    $res = $user->getAll();
    myPrint($res);
    // query: SELECT * FROM user
    // the result-array is indexed by 'name,surname'



    //
    //      8
    //
    // join the table 'time' this automatically detects where there are
    // columns that refer to one another, this uses a regExp that you can simply
    // modify (see $_tableNamePreg and $_columnNamePreg), by default this maps
    // stuff like 'user_id'=>'user.id'
    headline('using autoJoin');
    $user->reset();     // reset the query-builder, so no where, order, etc. are set
    $user->autoJoin('time');
    $user->setOrder('surname');
    $res = $user->getAll();
    myPrint($res);
    // query: SELECT * FROM user,time WHERE user.id=time.user_id ORDER BY surname


    //
    //      9
    //
    // does the same as the example above
    // only that you have to hardcode the join by hand, no autoJoin here
    headline('using setJoin instead of autoJoin');
    $user->reset();     // reset the query-builder, so no where, order, etc. are set
    $user->setJoin('time',TABLE_USER.'.id=time.user_id');
    $user->setOrder('surname');
    $res = $user->getAll();
    myPrint($res);
    // query: SELECT * FROM user,time WHERE user.id=time.user_id ORDER BY surname


    //
    //      10
    //
    headline('adding data using $user->save($data)');
    $data = array('login'=>'new','name'=>'foo','surname'=>'bar');
    $fooBarId = $user->save($data);
    myPrint($fooBarId);
    // query: INSERT INTO user (id,login,name,surname) VALUES (<sequences>,"new","foo","bar")


    //
    //      11
    //
    headline('updating using $user->save($data)');
    $data = array('id'=>$fooBarId,'login'=>'NEW','name'=>'Mr. foo');
    $res = $user->save($data);
    myPrint($res);
    // query: UPDATE user (id,login,name,surname) VALUES (<sequences>,"new","foo","bar")


    //
    //      12
    //
    headline('updating using $user->update($data)');
    $res = $user->update($data);
    myPrint($res);
    // query: UPDATE user (id,login,name,surname) VALUES (<sequences>,"new","foo","bar")


    //
    //      13
    //
    headline("remove the entry \$user->remove($fooBarId)");
    $res = $user->remove($fooBarId);
    myPrint($res);
    // query: DELETE FROM "uuser" WHERE "id" = $fooBarId





    //
    //  helper functions
    //
    function headline( $string='' )
    {
        global $headlineCnt;

        if( $string )
        {
            $headlineCnt++;
            print "<h1>$headlineCnt - $string</h1>";
        }
    }
    function myPrint($data)
    {
        print "<pre>";
        print_r($data);
        print '</pre>';
    }

?>