Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как вам мой велосипед?

Сообщения:  [1-10]   [11-16] 

 
 автор: nikita2206   (07.08.2010 в 23:18)   письмо автору
 
   для: Ури Геллер   (07.08.2010 в 12:25)
 

Есть такая штука - active record, позволяет избежать мешанины скл с похапе

   
 
 автор: Ури Геллер   (07.08.2010 в 13:43)   письмо автору
 
   для: Ури Геллер   (07.08.2010 в 13:31)
 



<?php

/* Небольшой класс для работы с MySQL */

class MySQL {

    public $link;
    private $show_errors = true;
    private $error_log = false;
    private $q = false;

    // $db = new MySQL($db_host, $db_user, $db_name, $db_pass);
    public function  __construct($db_host, $db_user, $db_name, $db_pass) {
        $this->link = mysql_connect($db_host, $db_user, $db_pass);
        if ($this->link === false) {
            $this->error_handler();
        }
        if (mysql_select_db($db_name) === false) {
            $this->error_handler();
        }
    }

    // $db->display_errors(0); // отключить вывод ошибок
    public function display_errors($bool) {
        $this->show_errors = $bool;
    }

    // $db->error_log('mysql_errors.log'); // записываем сообщения об ошибках в журнал
    public function error_log($filename) {
        $this->error_log = $filename;
    }
    

    private function error_handler() {
        if ($this->error_log) {
            $error = mysql_error();
            if ($this->q) {
                $error.". Query: ".$this->q;
                $this->q = false;
            }
            $f = fopen($this->error_log, "a+b");
            flock($f, LOCK_EX);
            fwrite($f, $error."\r\n");
            flock($f, LOCK_UN);
            fclose($f);
        }
        if ($this->show_errors == true) {
            die(mysql_error());
        }
    }

    // $result = $db->($query);
    public function query($query, $return_result = true) {
        $result = mysql_query($query);
        if (!$result) {
            if ($this->error_log !== false) {
                $this->q = $query;
            }
            $this->error_handler();
        }
        else if ($return_result == true) {
            return $result;
        }
        else {
            mysql_free_result($result);
        }
    }

    // $db->insert("users", array("id" => "NULL", "name" => "'test'", "password" => "'test'",));
    public function insert($table_name, $params) {
        $column_list = array_keys($params);
        $values = array_values($params);
        $q = "insert into ".$table_name." (".implode(",", $column_list).") values (".implode(",", $values).");";
        $this->query($q, false);
    }

    // $db->update("users", array("password" => "'new_password'",), "name = 'test'");
    public function update($table_name, $params, $where) {
        $items = array();
        foreach ($params as $k => $v) {
            $items[] = $k."=".$v;
        }
        $q = "update ".$table_name." set ".implode(",", $items)." where ".$where.";";
        $this->query($q, false);
    }

    // $db->delete("users", "name = 'test'")
    public function delete($table_name, $where) {
        $q = "delete from ".$table_name." where ".$where.";";
        $this->query($q, false);
    }

    // unset($db);
    // можно и так
    // mysql_close($db->link);
    public function  __destruct() {
        mysql_close($this->link);
    }
    
}

?>

   
 
 автор: neadekvat   (07.08.2010 в 13:42)   письмо автору
 
   для: Ури Геллер   (07.08.2010 в 13:31)
 

А словами сказать? Вы уже три раза код выложили - я его весь должен помнить, чтобы сравнить?

   
 
 автор: Ури Геллер   (07.08.2010 в 13:31)   письмо автору
 
   для: neadekvat   (07.08.2010 в 13:28)
 



<?php

/* Небольшой класс для работы с MySQL */

class MySQL {

    public $show_errors = false;
    public $error_log = false;
 
    public function init($db_host, $db_user, $db_name, $db_pass) {
        $link = mysql_connect($db_host, $db_user, $db_pass);
        if (!$link) {
            die($this->error_handler());
        }
        if (!mysql_select_db($db_name)) {
            die($this->error_handler());
        }
        return $link;
    }

    private function error_handler() {
        if ($this->error_log) {
            $f = fopen($this->error_log, "a+b");
            flock($f, LOCK_EX);
            fwrite($f, mysql_error()."\r\n");
            flock($f, LOCK_UN);
            fclose($f);
        }
        if ($this->show_errors == true) {
            die(mysql_error());
        }
    }

    public function query($query, $return_result = true) {
        $result = mysql_query($query);
        if (!$result) {
            die($this->error_handler());
        }
        else if ($return_result) {
            return $result;
        }
        else {
            mysql_free_result($result);
        }
    }

    public function insert($table_name, $params) {
        $column_list = array_keys($params);
        $values = array_values($params);
        $q = "insert into ".$table_name." (".implode(",", $column_list).") values (".implode(",", $values).");";
        $this->query($q, false);
    }

    public function update($table_name, $params, $where) {
        $items = array();
        foreach ($params as $k => $v) {
            $items[] = $k."=".$v;
        }
        $q = "update ".$table_name." set ".implode(",", $items)." where ".$where.";";
        $this->query($q, false);
    }

    public function delete($table_name, $where) {
        $q = "delete from ".$table_name." where ".$where.";";
        $this->query($q, false);
    }
    
}

?>


   
 
 автор: neadekvat   (07.08.2010 в 13:28)   письмо автору
 
   для: Ури Геллер   (07.08.2010 в 13:26)
 

Не понял мысли поста.

   
 
 автор: Ури Геллер   (07.08.2010 в 13:26)   письмо автору
 
   для: neadekvat   (07.08.2010 в 13:23)
 

а там все равно ерунда написана чтобы журнал логов сделать придётся объект создавать чтобы сохранять настройки

   
 
 автор: neadekvat   (07.08.2010 в 13:23)   письмо автору
 
   для: Ури Геллер   (07.08.2010 в 13:21)
 

Я бы советовал использовать file_put_contents, меньше кода.

   
 
 автор: Ури Геллер   (07.08.2010 в 13:21)   письмо автору
 
   для: neadekvat   (07.08.2010 в 13:04)
 

Насчёт логов можно переписать вот так :


<?php

/* Небольшой класс для работы с MySQL */

class MySQL {

    static public function init($db_host, $db_user, $db_name, $db_pass) {
        $link = mysql_connect($db_host, $db_user, $db_pass);
        if (!$link) {
            die(mysql_error());
        }
        if (!mysql_select_db($db_name)) {
            die(mysql_error());
        }
        return $link;
    }

    static public function query($query, $return_result = true, $log = false) {
        $result = mysql_query($query);
        if (!$result and $log) {
            $f = fopen($log, "a+b");
            flock($f, LOCK_EX);
            fwrite($f, mysql_error()."\r\n");
            flock($f, LOCK_UN);
            fclose($f);
        }
        if ($return_result) {
            return $result;
        }
        else {
            mysql_free_result($result);
        }
    }

    static public function insert($table_name, $params) {
        $column_list = array_keys($params);
        $values = array_values($params);
        $q = "insert into ".$table_name." (".implode(",", $column_list).") values (".implode(",", $values).");";
        self::query($q, false);
    }

    static public function update($table_name, $params, $where) {
        $items = array();
        foreach ($params as $k => $v) {
            $items[] = $k."=".$v;
        }
        $q = "update ".$table_name." set ".implode(",", $items)." where ".$where.";";
        self::query($q, false);
    }

    static public function delete($table_name, $where) {
        $q = "delete from ".$table_name." where ".$where.";";
        self::query($q, false);
    }
    
}

?>


   
 
 автор: neadekvat   (07.08.2010 в 13:16)   письмо автору
 
   для: Ури Геллер   (07.08.2010 в 13:13)
 

Ну, можно составить список констант и не обрабатывать их.
В противном случаи ваш класс совершенно теряет смысл. Он должен облегчать жизнь - а он просто предлагает альтернативу имеющейся рутины. Шило на мыло.

   
 
 автор: Ури Геллер   (07.08.2010 в 13:13)   письмо автору
 
   для: neadekvat   (07.08.2010 в 13:04)
 

ну да а как быть например с разными SQL константами типа DEFAULT, CURRENT_TIMESTAMP, NULL

   

Сообщения:  [1-10]   [11-16] 

Форум разработан IT-студией SoftTime