Najnovšie na Twitteri
    sledujte môj Twitter
    Moje projekty

    Zjednodušenie práce s databázou

    Publikované: 31.07.2009 07:38 | Zobrazené: 628x

    <?php
     
    include 'include/db.php';
     
    $query = "select usr_id, usr_name from user ";
    $query.= "where usr_login='{login}' and usr_status='{status}'";
     
    $result = db_query($query, array(
        'login'  => 'fero',
        'status' => 1,
    ));
     
    if ($obj = db_fetch_object($result)) {
        echo htmlspecialchars($obj->usr_name);
    }
     
    ?>

    Ako prvé si všimnite, že som nikde nevytváral pripojenie k databáze. O to sa postará knižnica. Keď sa bližšie pozriete na sql dotaz, tak v ňom objavíte vzor. Vzor je akýkoľvek reťazec, ktorý je obalený do krútených zátvoriek. Vzor napíšeme všade tam, kde by sme inak dosadzovali nejakú premennú. Previazanie premennej so vzorom urobí funkcia db_query. Pri tomto previazaní sa taktiež automaticky všetky premenné budú escapovať. Už sa o to nemusíte starať ručne. A to je viac-menej všetko k jej použitiu:)

    Aby sa knižnica vedela pripojiť k databáze, potrebuje mať k tomu informácie. Predpokladá, že ich nájde v súbore etc/config.php. Pokiaľ dôjde k volaniu funkcie db_query a neexistuje pripojenie k databáze, tak si ho funkcia vytvorí a uloží v statickej premennej (aby sa nemusela otvárať samostatná konexia pre každý dotaz). Okrem vytvorenia konexie funkcia ešte previaže vzory s premennými, ktoré najskôr spacifikuje oescapovaním nebezpečných znakov. A nakoniec už len vykoná dotaz na databázu.

    <?php
    <?php
    /* vim:set shiftwidth=4 tabstop=4 expandtab: */
    ######################################################################
     
    ######################################################################
    if (!defined("__DB_PHP__")) {
    define("__DB_PHP__", 1);
     
    ######################################################################
    if (!defined(DB_HOST)) {
        define(DB_HOST,   'localhost');
    }
    if (!defined(DB_USER)) {
        define(DB_USER,   'user');
    }
    if (!defined(DB_PASSWD)) {
        define(DB_PASSWD, 'passwd');
    }
    if (!defined(DB_DB)) {
        define(DB_DB,     'db');
    }
    ######################################################################
     
    ######################################################################
    function db_query($_query, $_params = null) {
        # {{{
        static $connection = null;
     
        if (is_null($connection)) {
            $connection = mysql_connect(DB_HOST, DB_USER, DB_PASSWD);
            mysql_select_db(DB_DB);
            #mysql_query("SET character_set_client=utf8");
            #mysql_query("SET character_set_connection=utf8");
            #mysql_query("SET character_set_results=utf8");
        }
        if (is_array($_params)) {
            foreach ($_params as $name => $value) {
                if (get_magic_quotes_gpc()) {
                    $value = stripslashes($value);
                }
                $_query = str_replace('{'.$name.'}', mysql_real_escape_string($value), $_query);
            }
        }
        if (defined('DEBUG_MODE') && DEBUG_MODE) {
            fb($_query, "query", FirePHP::TRACE);
        }
     
        $result = mysql_query($_query);
        if (!$result) {
            echo "<div style='color: red;'>".mysql_error()."</div>";
            #echo "<pre>$_query</pre>";
        }
        return $result;
        # }}}
    }
     
    ######################################################################
    function db_fetch_object($_result) {
        # {{{
        if (!$_result) {
            return false;
        }
        return mysql_fetch_object($_result);
        # }}}
    }
     
    ######################################################################
    function db_last_id() {
        # {{{
        return mysql_insert_id();
        # }}}
    }
     
    ######################################################################
    }
     
    ######################################################################

    Ako vidíte, knižnica nie je objektová, ale dá len minimum úsilia ju na objektovú prepísať.

    Pošli na: Facebook   vybrali.sme.sk
    Komentáre:

    Zatiaľ nie sú žiadne komentáre.

    Pridať komentár