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

class sql

  • Frozzeg

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

    Spritz 1 ноября 2011 г. 7:59, спустя 9 минут 21 секунду

    чел просто хочет получит опыт
    You can be anything you want to be. Just turn yourself into anything you think that you could ever be.
  • Ivan

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

    Spritz 1 ноября 2011 г. 8:56, спустя 56 минут 52 секунды

    Полезный совет: класс запроса и класс базы данных должны быть два разных класса
  • master

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

    Spritz 1 ноября 2011 г. 16:01, спустя 7 часов 5 минут 8 секунд

    $db->q_select("select id, name from page order by id");

    $db->q_delete("delete * from page");

    а что будет если сделать
    $db->q_select("delete * from page");
    ?
    не всё полезно, что в swap полезло
  • Sinkler

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

    Spritz 1 ноября 2011 г. 16:05, спустя 4 минуты 1 секунду

    лол
  • master

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

    Spritz 1 ноября 2011 г. 16:13, спустя 7 минут 32 секунды

    класс запроса и класс базы данных должны быть два разных класса

    да ну, какой класс запроса, не нужен он совсем
    не всё полезно, что в swap полезло
  • Ivan

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

    Spritz 1 ноября 2011 г. 16:21, спустя 8 минут 39 секунд


    класс запроса и класс базы данных должны быть два разных класса

    да ну, какой класс запроса, не нужен он совсем


    а как же IoC?
    Спустя 101 сек.
    v1
    $query = $db->query($sql);
    $db->fetch_array($query);

    v2
    $query = $db->query($sql);
    $query->fetch_array();

    v3
    $db->query($sql)->fetch_array();
  • master

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

    Spritz 1 ноября 2011 г. 16:45, спустя 23 минуты 24 секунды

    $query = $db->query($sql);
    $db->fetch_array($query);

    и здравствуй, утечка памяти. кто вспомнит что нужно сделать unset($query)?
    и в чём собственно разница с
    $db->fetch_array($query)
    ?
    не всё полезно, что в swap полезло
  • Ivan

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

    Spritz 1 ноября 2011 г. 19:13, спустя 2 часа 28 минут 13 секунд


    $query = $db->query($sql);
    $db->fetch_array($query);

    и здравствуй, утечка памяти. кто вспомнит что нужно сделать unset($query)?
    и в чём собственно разница с
    $db->fetch_array($query)
    ?


    а пхп есть сборщик памяти, нужно просто все грамотно засовывать в функции которые после вызова все локальные переменные в себе уничтожают по идее
    $db->query($sql)->fetch_array(); вот такой стиль мне нравится - вполне удобно
  • master

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

    Spritz 1 ноября 2011 г. 20:19, спустя 1 час 6 минут 5 секунд

    нужно просто все грамотно засовывать в функции которые после вызова все локальные переменные в себе уничтожают по идее

    например?
    Спустя 47 сек.
    $db->query($sql)->fetch_array(); вот такой стиль мне нравится - вполне удобно

    за такое в серьёзных командах пиздят клюшкой, потому что дебажить сложнее. экономия на спичках.
    не всё полезно, что в swap полезло
  • vasa_c

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

    Spritz 2 ноября 2011 г. 3:27, спустя 7 часов 8 минут 22 секунды

    это не класс запроса.
    это класс результата.
  • Strate

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

    Spritz 3 ноября 2011 г. 15:15, спустя 1 день 11 часов 47 минут

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


    А чё разбираться то? Переделывай из статики в private и всё. Класс для того и пишут чтобы избавиться от необходимости таскать ид соединения.

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



    Ну, есть сервера на php 3, то ведь они не наша ЦА, так? Если уж ознакамливаться - то сразу php5.3, namespaces, closures и т.д.
  • sweet15w

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

    Spritz 6 ноября 2011 г. 8:55, спустя 2 дня 18 часов 40 минут

    забываем все вышеупомянутое )))

    вопрос: если я, допустим, делаю для разных баз… как лучше организовать??

    вариант1: пишем классы, каждый из которых работает с своим видом базы ( mysql, postgresql и т.д. ) и в зависимости от того какую базу надо… вызываем нужный класс

    вариант2: пишем некий класс, во время создания которого передается значение нужной базы ( array("driver" => "mysql") )

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

    как лучше то это вес представить логически?
  • Ivan

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

    Spritz 6 ноября 2011 г. 9:38, спустя 42 минуты 41 секунду

    Хватит писать велосипеды
  • Nyaah

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

    Spritz 6 ноября 2011 г. 10:48, спустя 1 час 9 минут 48 секунд

    фабрику соединений делай, к примеру:
    Абстрактный класс или интерфейс драйвера соединения с бд: AbstractDbConnection or IDbConnection
    Драйвера, расширяющие абстрактный класс или реализующие интерфейс, например MysqlDbConnection extends AbstractDbConnection, PGDbConnection extends AbstractDbConnection
    И собственно фабрика соединений, по дсн или по имени драйвера создающая инстансы сединений DbConnectionFactory::factory('mysql', $connectionOptions) or DbConnectionFactory::factory($dsn); и возвращающая AbstractDbConnection или IDbConnection, смотря по какому пути пойдёшь.
    В дальнайшем при использовании полученного инстанса можно использовать только методы, объявленные в AbstractDbConnection или IDbConnection. Тоесть у тебя есть интерфейс работы с базой данных, обявленный в абстрактном классе или интерфейсе, если он полностью реализован в наследуемом драйвере, то тебе фообще побоку с какой бд ты работаешь, используешь данный интерфейс и всё.
    По мне тут лучше использоватль абстрактный класс, так как докуя всего можно в него положить, а в реализии драйверов реализровать только соединение/запрос/разрыв соединения/эскейпинг/препарейшен.
    Work, buy, consume, die
  • phpdude

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

    Spritz 6 ноября 2011 г. 10:53, спустя 5 минут 5 секунд

    Nyaah, ты взорвешь ему мозг. не надо :)
    Сапожник без сапог

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