Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Никита Козин 17.05.2005 12:45 / 17.05.2005 12:46
Почему бы не передавать классу объект SQL из примеров?@init[params] # нам ОБЯЗАТЕЛЬНО должны должны передать объект, через который будут делаться все sql-запросы ^if(def $params.csql){ $csql[$params.csql] }{ ^throw[shop;Initialization failure. ^$.csql option MUST be specified.] } # end @init[] # непосредственно место, откуда происходит инициализация класса: @USE mysql.p shop.p @auto[] $SQL.connect-string[mysql://user:password@server/table] $MAIN:pSQL[^mysql::init[$SQL.connect-string]] ^MAIN:pSQL.server{ $shop[ ^shop::init[ $.csql[$MAIN:pSQL] ] ] } # end @auto[]Теперь подключение будет происходить так:
@install[]
^csql.void{
CREATE TABLE IF NOT EXISTS ...
}
# end @install[]
Дальше, зачем проверять чему равен action:^if($action eq "add"){ ^if(def $cat_id){ ^if(def $quantity){ ^connect[$self.connect]{ ^void:sql{INSERT INTO basket (cat_id, quantity, user_id) VALUES ('^taint[sql][$cat_id]', '^taint[sql][$quantity]', '^taint[sql][$self.user_id]')} ^self.event.append{is_bas_add} } } } } ############################ @bas_add[cat_id;quantity] ^if((def $cat_id && ^cat_id.int(0) != 0) && (def $quantity && ^quantity.int(0) != 0)){ ^csql.void{ INSERT INTO basket ( cat_id, quantity, user_id ) VALUES ( $cat_id, $quantity, $self.user_id ) ^rem{ *** Не нужно делать никаких taint-ов, парсер их сам сделает при работе с базой *** } ^rem{ *** К тому же если мы вставляем только цифры - что тэйнтить? *** } } } # end @bas_add[] Ну и остальные методы по анологии вроде бы. Это то, что бросилось. Да, кстати, зачем объявлять перепенные как $self.[переменная]?.. Пусть они и остаются внутри класса.