Autor Zpráva
Tirus
Profil
Plánuji si udělat vlastní třídu. ovšem rád bych si tam udělal parametry, ale netuším zda to MySQL podporuje, popř. jak by ste toto udělaly?

<?php
  
  
  class mysql_driver
  {
     private $conn;
   
    public function connect($server,$login,$password,$database,$charset = 'utf8')
    {
         $this->conn = mysql_connect($server,$login,$password) or die(mysql_error());
         $this->select_db($database);
         $this->set_charset($charset); 
    }  

    protected function select_db($database)
    {  
        mysql_select_db($this->$database,$this->conn) or die(mysql_error());        
    }

    protected function set_charset($charset)
    { 
        mysql_set_charset($charset,$this->conn) or die (mysql_error());        
    }
    
    public function truncate($table)
    {
        $this->query('TRUNCATE TABLE '.$table);
        
    }
    
    public function query($sql)
    {
        return mysql_query($sql,$this->conn);
    }
    
    public function order_by($column, $by = 'ASC')
    {
        $string = 'ORDER BY ';
        if(is_array($column))
        {
            foreach($column as $val)
            {
                $string .= $val.',';
            }
            $string = substr($string,0,-1);
        }
        
        return $string.' '.$by;
    }
    
    public function current_timestamp()
    {
        return ' CURRENT_TIMESTAMP() ';
    }
    
    public function current_date()
    {
        return ' CURRENT_DATE() ';
    }
    
    public function current_time()
    {
        return ' CURTIME() ';
    }
    

    public function last_inserted_id()
    {
        return mysql_insert_id($this->conn);        
    }
    
    private function protect_db($value)
    {
        if(is_int($value))
        {
            return $value;
        }
        return mysql_escape_string($value);       
    }
 
    public function close()
    {
        mysql_close($this->conn);
    }

    function __destruct()
    {
        $this->close();
    }
  }
?>


nebo máte něco jednoduchého? dibi mi nevyhovuje.. v práci pracuji s třídou, která je celkem velice promakaná, ovšem podporuje MsSQL, Oracle, al jeste jednu databazy, co má ta firma pod vlastním vývojem
Kcko
Profil
Tirus:
Dibi Ti nevyhovuje (proč?) a to co jsi vyplodil má být lepší? (Ke všemu to nic neumí).
Tirus
Profil
Kcko:
Zda se nepletu, tak nikdo neřekl že to mé má být lepší.
nevyhovuje mi kvůli tomu stylu zápisu. Rád bych používat něco co je neblíž tomu co máme v práci (jenže to nemá MySQL).
využíváme parametrů
Ugo
Profil
Kcko:
dibi je dobrá jen pokud potřebuješ stále psát složitější nestandartní dotazy, jinak je lepší nějaký pořádný ulehčovač což dibi neumí (není to jeho cílem), ovšem tam zas bývá problém napsat ošetřený složitý dotaz na což je dibi skvělé, chtělo by to zkombinovat, bohužel dibi je takový kolos, že implementovat ho někam není zcela jednoduché a dělat od začátku cely ten sprintf systém (který je v dibi mimochodem udělán celkem nevesele) je docela otrava :)

Tirus:
nevím co máš na mysli těmi parametry, ale když už děláš třídu, tak v ní alespoň ošetřuj vstupy - at to má nějaký význam taky :)
Joker
Profil
Tirus:
Já nějak nevidím důvod vůbec tu třídu z [#1] používat, většina metod jsou jen aliasy pro něco jiného.

Proč nepoužít třídu mysqli, která umí i ty parametrizované dotazy?

Když to vezmu jako cvičení z OOP, co bych na té třídě zlepšil:
- Po zkonstruování objektu třídy prakticky jediné co se dá dělat je zavolat connect(), většina ostatních metod bude generovat varování. Připojení by mělo být rovnou v konstruktoru.
- Metoda connect() by rozhodně neměla svévolně ukončit provádění skriptu a ještě navíc vypsat mysql_error(). Jednak to je špatně principiálně (metoda pro připojení k databázi by rozhodně neměla vypisovat text, ani nemluvě o svévolném ukončení skriptu), jednak tahle metoda není použitelná pro ostrý provoz (kde se uživatelům nemají vypisovat chybové hlášky). A jelikož bez téhle metody se třída používat nedá, je nepoužitelná pro ostrý provoz celá ta třída.
- Metody current_timestamp(), current_date() a current_time() jsou matoucí, neočekával bych, že metoda s názvem current_time() mi vrátí řetězec " CURTIME()". Nemluvě o tom, že jsou prakticky k ničemu. Krom toho tyhle metody vracejí řetězec s mezerou na začátku, zatímco třeba order_by() bez mezery.
- Volání například order_by("jmeno") vypadá na pohled jako úplně logické použití, ale vrátí "ORDER BY ASC".
Tirus
Profil
Joker:
ok, beru si to k srdci.. máš nějaké příklady na mysqli? nikdy jsem s tím nepracoval a na php.net mne to jen mátlo

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0