ФорумПрограммированиеPHP для идиотовPHP и ООП → class sql

class sql

  • sweet15w

    Сообщения: 139 Репутация: N Группа: Кто попало

    Spritz 27 октября 2011 г. 6:37

    начало:

    	class SQL {

    static $sql_id = 0;

    protected $sql_host;
    protected $sql_user;
    protected $sql_password;
    protected $sql_database;

    function __construct() {

    if( SQL::$sql_id == 0 ) {
    $this->set_sql_parametrs();
    SQL::$sql_id = mysql_connect($this->sql_host,$this->sql_user,$this->sql_password) or die ("can't connect to mysql");
    mysql_query("create database $this->sql_database");
    mysql_select_db($this->sql_database) or die ("can't select database");
    date_default_timezone_set("Europe/Moscow") or die ("can't set default timesone");
    }
    }

    function __destruct() {
    if( SQL::$sql_id != 0 ){
    mysql_close( SQL::$sql_id );
    SQL::$sql_id = 0;
    }
    }

    function set_sql_parametrs() { /* метод установки параметров соединения */
    $this->sql_host="localhost";
    $this->sql_user="root";
    $this->sql_password="";
    $this->sql_database="wwwoopru";
    }
    }


    пока все нормом идет?? )

    особенности:

    в конструкторе при создании объекта проверяется, было ли установлено соединение ранее, если не было, то устанавливается, затем вызывается метод установки параметров соединения
    параметры соединения должны браться из файла конфига (пока жестко присвоил)
    деструктор проверяет было ли разорвано соединение, если не было, то разрывает его

    ваши предложения, поправки, пожелания?

    p.s. не орем, пожалуйста про sqli, pdo и т.п. эти все рукожопства придуманы для ознакомления… практики
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 27 октября 2011 г. 7:18, спустя 41 минуту 16 секунд

    хуйня
    Спустя 46 сек.
    хотя бы потому что настрйоки конекта к базе должны браться из конфигов а в класс передаваться а не хардкорно записаны в классе. чтобы поменять настройки мне чо - надо твой класс унаследовать и переопределить параметры соединения? xDDDDDDDDDDD
    Сапожник без сапог
  • arvitaly

    Сообщения: 292 Репутация: N Группа: Адекваты

    Spritz 27 октября 2011 г. 8:16, спустя 58 минут 25 секунд

    SQL::$sql_id = mysql_connect($this->sql_host,$this->sql_user,$this->sql_password) or die ("can't connect to mysql");


    ужссссс, изучайте исключения
    Спустя 69 сек.
    ахахах

    каким боком date_default_timezone_set("Europe/Moscow") в классе SQL
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 27 октября 2011 г. 8:26, спустя 9 минут 16 секунд

    пока что хуйня, самая мякотка которой в том, что когда ты начнёшь использовать класс ты сам будешь по полчаса втыкать "блять, как его использовать-то?".
    напиши сначала пример использования своего класса, а потом по интерфейсу напишешь начинку
    не всё полезно, что в swap полезло
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 27 октября 2011 г. 11:20, спустя 2 часа 54 минуты 40 секунд

    >parametrs
    parametres (правило обозначения множественных чисел в англ. языке)
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 27 октября 2011 г. 11:56, спустя 35 минут 30 секунд

    params
    не всё полезно, что в swap полезло
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 27 октября 2011 г. 12:10, спустя 14 минут


    >parametrs
    parametres (правило обозначения множественных чисел в англ. языке)

    ву-ха-ха, а вот и хуй. parameters
  • Ivan

    Сообщения: 1316 Репутация: N Группа: Адекваты

    Spritz 27 октября 2011 г. 13:32, спустя 1 час 21 минуту 58 секунд

    Вот я нуб! Пошёл учить английский
  • Faster

    Сообщения: 1159 Репутация: N Группа: Кто попало

    Spritz 27 октября 2011 г. 17:38, спустя 4 часа 5 минут 55 секунд

    presets
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 27 октября 2011 г. 17:50, спустя 12 минут 31 секунду

    /* метод установки параметров соединения */



    ну вы и школота :-)

    setupConnectionDetails()

    должна такая хуйня называться если она есть. Но ее там быть не должно, это вообще хуйня тогда а не класс если такая хуйня там есть :)
    Сапожник без сапог
  • Kikky

    Сообщения: 201 Репутация: N Группа: Кто попало

    Spritz 28 октября 2011 г. 5:37, спустя 11 часов 46 минут 54 секунды

    sweet15w, почитай Макконнелла - Совершенный код, а конкретно главы про АТД и классы
  • Strate

    Сообщения: 12 Репутация: N Группа: Кто попало

    Spritz 29 октября 2011 г. 15:39, спустя 1 день 10 часов 1 минуту

    Хуйня потому что mysql_* Есть же как минимум mysqli
    Спустя 54 сек.
    И да, почему идентификатор соединения с базой - статика? А если мне надо 2 коннекта, чё делать?
    Спустя 13 сек.
    И вообще: http://pyha.ru/go/godb/
  • sweet15w

    Сообщения: 139 Репутация: N Группа: Кто попало

    Spritz 1 ноября 2011 г. 3:49, спустя 2 дня 12 часов 10 минут

    phpdude, написано ведь:
    параметры соединения должны браться из файла конфига (пока жестко присвоил)


    Ivan, http://www.translate.ru/ параметры (рус) = parameters (eng)

    master, пример использования: класс при выборке должен возвращать двумерный ассоциативный массив (писал функцию когда то аналогичную без ООП)
    выглядеть будет как-то так:


    $db=new SQL();
    $db->

    /*выборка из базы и вывод на экран*/
    $menu=$db->q_select("select id, name from page order by id");
    for( $i=0;$i<count($menu);$i++ ) {
    echo $menu[$i]['id']." - ".$menu[$i]['name'];
    }

    /*удаление из базы | возвращает количество удаленных записей*/
    $result=$db->q_delete("delete * from page");

    /*обновление базы | возвращает количество обновленных записей*/
    $result=$db->q_update("update page set name='".test."' where id>'5'");




    arvitaly,
    каким боком date_default_timezone_set("Europe/Moscow") в классе SQL

    да это запись из конфига была просто автоматом скопирована…

    arvitaly, а что исключать… если база не выбралась… или нет коннекта… данных так и так не будет никаких…


    setupConnectionDetails()
    parametrs
    params
    parametres
    да суть то не в том как какой метод или свойство называется… а то, как оно не правильно работает…

    И да, почему идентификатор соединения с базой - статика? А если мне надо 2 коннекта, чё делать? [/qote] ну для начала мне бы хоть с одним соединением разобраться хочется… а уж дальше плясать от этого…

    Хуйня потому что mysql_* Есть же как минимум mysqli
    у Вас весомые аргументы… а есть сервера, которые не поддерживают sqli и т.п.?? и вообще
    p.s. не орем, пожалуйста про sqli, pdo и т.п. эти все рукожопства придуманы для ознакомления… практики
  • sweet15w

    Сообщения: 139 Репутация: N Группа: Кто попало

    Spritz 1 ноября 2011 г. 6:11, спустя 2 часа 21 минуту 40 секунд

    файл config
    <?php
    $config=array(
    'sql_host' => 'localhost',
    'sql_user' => 'root',
    'sql_password' => '',
    'sql_database' => 'wwwoopru',
    'sql_charset' => 'cp1251',
    );
    ?>


    <?php
    /**
    класс для работы с базой данных mysql
    **/
    class SQL {


    /**
    статическая переменная для идентификации текущего соединения
    **/
    static $sql_id = 0;

    protected $sql_host;
    protected $sql_user;
    protected $sql_password;
    protected $sql_database;
    public $sql_charset;


    /**
    конструктор класса
    **/
    function __construct() {

    if( SQL::$sql_id == 0 ) {
    require_once "../cfg/config.php";
    $this->sql_params_set( $config );
    SQL::$sql_id = mysql_connect( $this->sql_host, $this->sql_user, $this->sql_password );
    $this->sql_database_create( $this->sql_database );
    $this->sql_database_set( $this->sql_database );
    $this->sql_charset_set( $this->sql_charset );
    }
    }


    /**
    деструктор класса
    **/
    function __destruct() {
    if( SQL::$sql_id != 0 ){
    mysql_close( SQL::$sql_id );
    SQL::$sql_id = 0;
    unset( $config );
    }
    }


    /**
    установка параметров из файла конфига
    **/
    function sql_params_set( $config ) {
    $this->sql_host=$config["sql_host"];
    $this->sql_user=$config["sql_user"];
    $this->sql_password=$config["sql_password"];
    $this->sql_database=$config["sql_database"];
    $this->sql_charset=$config["sql_charset"];
    }


    /**
    установка кодировки по умолчанию для текущего соединения
    **/
    function sql_charset_set( $sql_charset ) {
    mysql_query("set names ".$sql_charset);
    mysql_query("set @@character_set_client='".$sql_charset."'");
    }


    /**
    выбор базы данных для текущего соединения
    **/
    function sql_database_set( $sql_database ) {
    mysql_select_db( $sql_database );
    }


    /**
    создание базы данных для текущего соединения
    **/
    function sql_database_create( $sql_database ) {
    mysql_query( "create database if not exists '".$sql_database."'" );
    }


    /**
    выборка из базы данных, возвращается двумерный ассоциативного массива
    **/
    function query_select( $sql_query ) {

    /** в разработке…еще нужно возвращать двумерный ассоциативный массив **/

    return array(
    'result' => 0,
    'error' => '',
    'count => 0,'
    );

    /**
    возвращает array(
    'result' - неудачное / успешное выполнение запроса,
    'error' - при неудачном выполнении возвращает код ошибки с описанием,
    'count' - количество выбранных записей,
    )
    **/
    }


    /**
    удаление из базы данных, возвращается число удаленных строк
    **/
    function query_delete( $sql_query ) {

    /** в разработке… **/

    return array(
    'result' => 0,
    'error' => '',
    'count => 0,'
    );

    /**
    возвращает array(
    'result' - неудачное / успешное выполнение запроса,
    'error' - при неудачном выполнении возвращает код ошибки с описанием,
    'count' - количество удаленных записей,
    )
    **/
    }


    /**
    изменение базы данных, возвращается число измененных строк
    **/
    function query_update( $sql_query ) {

    /** в разработке… **/

    return array(
    'result' => 0,
    'error' => '',
    'count => 0,'
    );

    /**
    возвращает array(
    'result' - неудачное / успешное выполнение запроса,
    'error' - при неудачном выполнении возвращает код ошибки с описанием,
    'count' - количество измененных записей,
    )
    **/
    }


    /**
    добавление в базу данных, возвращается число добавленных строк
    **/
    function query_insert( $sql_query ) {
    if( !mysql_query( $sql_query ) ) {
    /* неудачное выполнение запроса */
    return array(
    'result' => 0,
    'error' => "MYSQL ERROR #".mysql_errno().": ".mysql_error(),
    'count' => 0,
    );
    } else {
    /* успешное выполнение запроса */
    return array(
    'result' => 1,
    'error' => "",
    'count' => 1,
    );

    /**
    возвращает array(
    'result' - неудачное / успешное выполнение запроса,
    'error' - при неудачном выполнении возвращает код ошибки с описанием,
    'count' - количество выполненых записей (на будущее, для мультизапросов),
    )
    **/
    }
    }
    }
    ?>
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 1 ноября 2011 г. 7:50, спустя 1 час 38 минут 51 секунду

    и чем оно удобнее, чем PDO, к примеру? За исключением того, что у тебя нихуя не эскейпируется, для каждого типа запросов придётся вызывать свой метод, кодировка соединения устанавливается хз как, в случае возникновения ошибки, найти её можно хер знает где, ну и т.д.
    Work, buy, consume, die

Пожалуйста, авторизуйтесь, чтобы написать комментарий!