| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Класс db_con |
| Автор: Muerto 20.8.2010, 16:35 |
| Не актуальная информация |
| Автор: Muerto 20.8.2010, 16:56 |
| Если у тебя есть метод init & open_conn, то где они вызываются в примере? Что бы не писать когда я использую этот класс лишний код, do_query($thequery) делает init() и open_conn() если не открыто подключения А фишка для подсчета подключений и запросов, это больше для проверки эффективности кода чтоли... в целях оптимизации скрипта |
| Автор: Muerto 20.8.2010, 23:18 | ||||||||||
| Решил попытаться создать функции которые будут работать с mysqli->prepare Пока что очень много сложностей... есть функция
которая возвращает мне
к примеру $query= $myconn->prepare_query("select * from test where id = ?"); Далее нужно делать $query->bind_param('i', $id); и $query->execute(); В чем проблема: Во первым, по вашему дальше стоит сделать две функции или одну? в любом случае, как мне построить функцию которая будет выполнять
и ещё одну или в той же которая будет делать
главная проблема в том что сейчас bind_param('i', $id); содержит только $id, но если строить глобальную функци, она должна получать любое количество значения... т.е. создаем функцию
Но как же мне массив с $values впихнуть в bind_param('i', $id); там ведь между каждым символом нужна запятая... explode ',' что ли... в общем хэлп! |
| Автор: Muerto 20.8.2010, 23:36 | ||||
| Или более простым языком, работает
Но глобально написать я не знаю как, за место 's' может быть 'sdsssssss' и за место 'hi' может быть массив с данными... Как же выполнить
|
| Автор: Muerto 21.8.2010, 00:21 | ||||
Вот в общем, может кому пригодиться...
самая главная проблема теперь за место
вернуть $thequery, и делать простой fetch_assoc к примеру |
| Автор: gta4kv 22.8.2010, 19:28 |
| Бред такой бред. Вы спрашиваете какую бы функцию добавить в класс, который будет использоваться в вашем коде, для ваших, никому не известных, задач. Где хоть какой то смысл? |
| Автор: Sanchezzz 24.8.2010, 09:10 |
| Такой тип задачь нужен только тогда вы пишете свою цмс и хотите сделать много движковый класс бд брехня конечно в основном но везде разные ситуации бывают. М имхо легче написать обертку на каждый класс по классу и в зависимости от настроек юзать его. хотя обычного mysql и mysqli достаточно. Даже если на хотинге нет этого mysqli это плохой хостинг и уже не твоя проблема что его нет. Уже давным давно забил на тех укого нет mysqli. |
| Автор: Photon 26.8.2010, 20:20 |
| А не проще bind_param и execute выполнять в одной функции? http://pastebin.ru/314296 |
| Автор: Muerto 5.9.2010, 23:05 |
| Доделал наконец то класс, вывожу результат вывода статического метода help Functions list of db_con class static function getInstance(); Create Singleton of the class private function __construct(); Set's cache directory(place), and the cache extensions for file and variables cache private function __clone(); Prevent object cloning public function init_conn($db_uname,$db_pass,$db_name,$db_host='localhost',$db_cs='utf8',$special_escape ='x@x'); Initiates the connection variables public function open_conn(); Open the connection public function close_conn(); Kills and then closes the connection public function get_sp_esc(); Get the CS from the class public function set_sp_esc($value); Sets the SC to the class public function escape($thequery); Escapes before do the query, using the special escape symbol you decide to use public function do_query($thequery,$escape=0); Do specified query, if escape is 1, it will use the escape function to do mysqli_real_escape public function reset_bind(); Reset the types and params containers public function var_bind(&$type,&$param); Prepare the types and parameters, accepting varsiables one by one, adding them to array for func bind_params public function ar_bind(&$type,&$param); Prepare the types and parameters, accepting array public function do_prepare($thequery); Prepare the statement using ->prepare(); public function bind_params(); Bind the parameters with the function bind_param, before you use it, use ar_bin or var_bind functions, and of course after do_prepare public function execute(); Executes the prepared statement with the binded parameters if there is... public static function fetch_it($theresult,$type); Fetch the result of a query, $type can be 'assoc', 'object', 'row', 'array' . public function fetch_result($theresult); Fetch the result with assoc method, for development purposes! Usage Examples: 1. DEFINE('SC','x@x'); $db=db_con::getInstance(); $db->init_conn('root','lqsym','db1','localhost','utf8',SC); $data=$db->do_query("INSERT INTO test (message) VALUES('".SC."".str_shuffle("abcdefghijklmnopqrstuvwxyz0123456789")."".SC."')",1); $db->close_conn(); echo $db->reqs_num; 2.$db=db_con::getInstance(); $db->init_conn('root','lqsym','db1'); $db->do_prepare("INSERT INTO test (message,message2,message3,message4) VALUES(?,?,?,?)"); $db->reset_bind(); $types=array('s','s','s'); $vars=array('message1','message2','message3'); $db->ar_bind($types,$vars); $onemore_t='s'; $onemore_v='cool'; $db->var_bind($onemore_t,$onemore_v); $db->bind_params(); $db->execute(); $db->close_conn(); |
| Автор: gta4kv 5.9.2010, 23:58 |
| а ООП в коде так и не пахнет |
| Автор: Muerto 6.9.2010, 00:09 |
| gta4kv, Наверно нет. Но что вам там пахнет а что нет, мне говорит очень мало Можно даже ткнуть на что то отсюда http://www.phpclasses.org/browse/class/10.html А вот полноценная система для студентов которая на моем классе работает http://learn-php.ru/m_shaot/?shared=1 + класc Benchmark результат которого можно увидеть в самом низу... |
| Автор: SneG0K 6.9.2010, 00:20 |
| И нафига это все? |
| Автор: Muerto 6.9.2010, 00:25 |
| SneG0K, Эти функции нужны для того что бы поднимать сайты за 5 секунд и не работать каждый раз с нуля в конце ээто будет MVC фреймворк на котором я мои проекты лепить буду |
| Автор: Sanchezzz 6.9.2010, 07:39 |
| ну чисто для себя не плохо. |
| Автор: enoff 6.9.2010, 07:46 |
| Muerto, и как будет выглядеть экономия времени аж до "за 5 секунд" на примере этого класса? ключевое слово, надо понимать... |
| Автор: SneG0K 6.9.2010, 09:37 |
| Muerto, Иуууу, Энджи! А зайти на PEAR или стянуть класс работы с бд допустим из Zend Framework, не? enoff, В разделе "Книги" попросил книгу, уже две недели никто не отвечает. |
| Автор: Muerto 6.9.2010, 09:48 | ||
| enoff, Понимайте , я встречал таких которые говорят, это да ООП , это не ООП. А что же есть ООП? Как правило когда мы говорим об ООП мы хотим, и это только мое ИМХО и насколько я понимаю то что делаю: 1. Мы хотим построить то чем сможем пользоваться много раз, и оно сэкономит нам время 2. хотим построить то что можно будет расширять и изменять... (например если я захочу вдруг работать с mysql а не mysqli , мне код менять не нужно целиком на ВСЕХ моих страницах, а только в моем классе!!! или же если мне вдруг ОО стиль mysqli не по душе более(а именно его использует мой класс)... Но здесь конечно кто то может сказать что и тупой набор функций сможет сделать эту работу... возможно и так! 3. Инкапсюляция - однозначно есть! 4. Наследования здесь как бы нету НО, есть один большой плюс, и это мой оригинальный autoloader, я классы вызываю вот так
И он его уже и заинклюдит и singleton вернет (может кто помнит прикол с PAAMAYIM NEKUDOTAYIM...) 5. Наследия у меня нету в данном классе, хотя теоретически можно было бы singleton вывести из классов... и полиморфизма здесь нету Добавлено @ 09:52 SneG0K, Стянуть всегда все можно, а нужно ли? |
| Автор: SneG0K 6.9.2010, 09:57 | ||
| Велосипед из Zend'a с мягким сидением и спинкой, у вашего же велосипеда нет сидения (торчит труба). Вопрос: на каком велосипеде ездить приятней? Ну, если вы девушка или не той ориентации, то тогда вопрос отпадает. В качестве учебного примера можно и написать такой класс, но не пользоваться им. Видите-ли, все уже придумали до нас. Добавлено через 42 секунды Добавлено через 3 минуты и 45 секунд
Это вернет только ошибку. Добавлено через 3 минуты и 57 секунд Ох, какой я придирчивый. |
| Автор: Muerto 6.9.2010, 10:08 | ||
| SneG0K, Имелось ввиду объекто-орентированый стиль работы с mysqli , это очепятка А это вернет ошибку только у вас!
Потому что вы не разработали функцию cload |
| Автор: SneG0K 6.9.2010, 10:12 |
Да нет. У вас это тоже не будет работать. Закрываться кавычки тоже надо |
| Автор: Muerto 6.9.2010, 10:17 |
| SneG0K, Наслаждайтесь http://learn-php.ru/m_shaot/ так же снизу можете увидеть насколько быстро мой мини фреймворк пашет А патом ваш ZEND запустите, и дайте знать как быстро сгенерируется аналог того что я вам выдал, да нет, вы просто hello world сделайте |
| Автор: enoff 6.9.2010, 10:17 |
| mysqli как раз предоставляет объектно-ориентированный интерфейс. в каждом вашем сообщении можно наблюдать полную уверенность в своей оригинальности и неповторимости Гради Буч. Объектно-ориентированный анализ и проектирование. http://www.helloworld.ru/texts/comp/other/oop/index.htm Добавлено через 4 минуты и 49 секунд Muerto, А насколько ваш фреймворк помог в разработке? а зачем на зенде хеллоу ворд делать? Вы сравните скорость разработки какой-нибудь большой системы на зенде и с вашим фреймворком. |
| Автор: SneG0K 6.9.2010, 10:24 |
enoff, Спасибо)) Добавлено через 1 минуту и 11 секунд Он просто прелесть |
| Автор: Muerto 6.9.2010, 10:29 | ||
SneG0K, И что вы этим получили по вашему
Кто кого умней? Вы бы хоть переводчик посмотрели, там у меня и логин и регистрация в одном месте, если вы не зарегины вас зарегит, а если зарегины, вас просто впустит =-) Если логин существует а пароль левый, вас не впустит! Вы не понимайте всю прелесть do_query("insert....",1); + функцию escape |
| Автор: enoff 6.9.2010, 10:31 |
| SneG0K, тоже мысль была, только я поле ввода не победил Добавлено через 1 минуту и 44 секунды Muerto, этот запрос вывалится с ошибкой, копнуть дальше и получим полной контроль над вашей |
| Автор: Muerto 6.9.2010, 10:34 | ||||
| enoff, Да можете играться сколько хотите, когда получаем $_POST идет фильтровка самая базовая через htmlspecialchars которая в общем не является защитой от иньекций, затем функция escape берет каждую ячейкую которую я засунул между волшебными символами, и фильтрует её через mysqli_real_escape Что бы облегчить вам взлом, добавление пользователя выглядит вот так:
Перед этим идет поиск пользователя
Или же вы думайте что разработчики php полные придурки, и нифига не понимают в OOP , и придумали никому не нужную функцию mysqli_real_escape? НИФИГА ВЫ НЕ ВЗЛОМАЛИ КАК ВЫ ПОНЯТЬ НЕ МОЖЕТЕ!!! |
| Автор: SneG0K 6.9.2010, 10:37 |
Вау! |
| Автор: Muerto 6.9.2010, 10:39 |
| читаем ниже |
| Автор: SneG0K 6.9.2010, 10:42 | ||||||
Что вы за ахинею придумали? Класс БД должен защищаться от SQL иньекций, функции работы с таблицей должны отталкиваться от класса БД и защищать только от XSS ЧТо это еще за ахинея, когда все делается в одном месте? Каждый компонент должен заниматься своим делом и защищать себя сам. Добавлено через 1 минуту и 1 секунду
Это я и без тебя понял.
Начинай, а я послушаю. Добавлено через 1 минуту и 33 секунды Muerto, ты небось выходец и хакзоны или хакер.ру ? |
| Автор: Muerto 6.9.2010, 10:48 | ||||
| SneG0K, Ну блин сколько же вам писать, что вас никуда таким запросом не впустило? или вам по пальцам продолжать объяснять? Я вам сам урок могу дать по SQL-injection , вы здесь никого ничем не удевили Я вам объясню, так как вы не понимайте что оно вам там пишет Вы сделали следующее 1. в логин вы впихнули ' or 1=1/* Пароль 123 2. Скрипт сделал $login=htmlspecialchars($_POST['login']); (Но может этого и не делать, это значения НЕ ИМЕЕТ)
Он не нашел ваш логин, и затем он сделал
т.е. он зарегил вас! Затем впустил в систему... Типер вы можетей зайти на /?logout И попытаться ввести ' or 1=1/* Пароль 12 Вам выдаст ошибку что ваш пароль не верный... если введете ' or 1=1/* Пароль 123 вы просто войдете в ВАШ аккаунт |
| Автор: SneG0K 6.9.2010, 10:50 |
Адмирал ясен хер! |
| Автор: cutwater 6.9.2010, 10:51 |
Дайте уже ребенку писать велосипеды. Читаю товарища уже не первый день, это более чем забавно. Впрочем с опытом пройдет. Многие в страдали юношеским максимализмом, велосипедописанием, уверенностью в том что делают лучше чем тысячи разработчиков по всему миру. Это проходит... Добавлено через 1 минуту и 43 секунды Когда / Если товарищ Muerto на нормальную работу, с постоянным code review и прочими радостями коммандной разработки, его быстро отучат писать велосипеды и думать что умней других и многих. |
| Автор: SneG0K 6.9.2010, 10:53 |
| Надо открывать ленты на винграде посвященные тем или иным лицам) |
| Автор: Muerto 6.9.2010, 10:54 | ||
| Вы пишите: Что вы за ахинею придумали? Класс БД должен защищаться от SQL иньекций, функции работы с таблицей должны отталкиваться от класса БД И на какой основе вы это пишите? Класс BD ничего кроме mysqli_real_escape не использует и не знает Я ему ставлю метки, где нужно отфильтровать, и он это делает через mysqli_real_escape а
это часть скрипта , нужно от XSS вообще то, что бы мне скрипты не повставляли но на BD не влияет никак кстати стоит помнить что на данный момент здесь НЕ MVC хоть и есть некий "контроллер" Добавлено @ 10:58 cutwater, А я ничего не думаю, я написал класс исключительно для себя, он выполняет свои цели отлично. Здесь вообще пол темы флуда... Ну вы говорите велосипеды, и уже все есть? так какого вы тут все делайте? идите качайте ZEND или YII и будет вам счастье, ещё есть сайт как http://www.phpclasses.org/ там вы ещё и классов накачайте, готовых. И потом вы себя программистами назовете, и скажите что знайте что такое OOP ? А я буду в сторонке смотреть на эту и жалеть вас. |
| Автор: enoff 6.9.2010, 11:00 |
| Muerto, от XSS то нужно, только правильнее будет в другом месте это делать, а не перед добавлением в базу. |
| Автор: SneG0K 6.9.2010, 11:01 | ||
Мы уже давно написали свои велосипеды, откатались на них и купили автомобили |
| Автор: Muerto 6.9.2010, 11:08 | ||||
| enoff, Вы однозначно правы, "принято" сохранять информацию в "чистом виде" , т.е. именно фильтровка mysqli_real_escape а затем уже при выводе инфы, запускать разные фильтровки... к примеру тот же htmlspecialchars нужно это от XSS К примеру в комментариях к новостям иногда можно впихнуть
Или
Зависит как там у них вывод инфы идет, и это выкинет сообщение Такие сайты вообще для поднятия ТИЦ и PR использовать можно, вставляя ссылки на свой сайт... Почему же здесь я фильтрую перед тем как впихиваю в базу? Ну собственно, потому что в данном случае оно для меня совершенно не имеет значения |
| Автор: cutwater 6.9.2010, 11:10 | ||||
За защиту от XSS должен отвечать уровень представления / view но никак не обработки данных. Ибо работать необходимо, удобно и правильно с raw данными. Но Вы же не считаетесь с чужими мнениями более опытных людей. P.S. именно поэтому столько матерились в сторону всяких magic quotes и прочих плюшек, якобы облегчающих жизнь. Добавлено через 1 минуту и 12 секунд
Это Вы сейчас так говорите, пока не столкнетесь с проблемами. И будет лишнего кода, заплатка на заплатке и заплаткой погоняет. Добавлено через 1 минуту и 52 секунды P. P. S. Как я уже говорил, бесполезно спорить с человеком, который слышет только себя. |
| Автор: Muerto 6.9.2010, 11:16 |
| cutwater, Это не MVC , и этот проект мелкий и нужен только не многим студентам, я в него мысль не вкладывал, хотя конечно возможно стоит сразу как бы всегда верным путем следовать А что бы здесь не говорили что я пусто слов, вот вам за 15 секунд использование XSS на сайте который по гуглю нашел Сюрприз для хакеров вроде SneG0K http://www.autobaza.ru/search.php?k=%22%3E%3Ca+href%3Dhttp%3A%2F%2Fforum.vingrad.ru%3E%C7%E4%E5%F1%FC+%E1%FB%EB+%EC%E5%E3%E0+%F5%E0%F6%EA%E5%F0+muerto%3C%2Fa%3E |
| Автор: SneG0K 6.9.2010, 11:16 |
Да Вы, какой вы опытный! Вы дилетант! Вы даже Hello World и использованием фреймворков не писали! И Enoff дилетант! И я! Мы все жалкие дилетанты! И вообще мы нифига не шарим! Класс работы с бд не должен быть удобным, он должен быть уникальным и плевать, что не удобным. |
| Автор: enoff 6.9.2010, 11:16 |
| cutwater, тут много раз вопрошали, зачем все эти велосипеды, но внятного ответа так и не было... Muerto, зачем что-то городить, когда mysql_real_escape_string + intval защитит от инъекций, а htmlspecialchars от xss? Лишние телодвижения здесь нет никакого оправдания... |
| Автор: SneG0K 6.9.2010, 11:17 |
И че? Добавлено через 1 минуту и 22 секунды Этот парень мне supervalislav'a напоминает |
| Автор: Muerto 6.9.2010, 11:22 | ||
Ну у меня оно так и есть, только порядок иной... Хотя в том что я вам описал явно не хватает пару вещей и это к примеру какой нибудь валидатор которые будет смотреть на паттерны... И говорить если пароль соответствует политике сайта, а так же логин... |
| Автор: enoff 6.9.2010, 11:23 |
| SneG0K, только его вспоминал Muerto, можно и админам написать, а не показывать свою крутость. К тому же некоторые ща налетят и будут мучать этот сайт. |
| Автор: cutwater 6.9.2010, 11:23 |
Просто в восторге от сайтов которые допускают в паролях только a-z 0-9 _ -, не допускают пробелы и спецсимволы. И обязательно требуют наличия цифр и символов разных регистров. |
| Автор: enoff 6.9.2010, 11:24 |
| Это прекрасно работает и без дополнительных вещей. Время не экономит, код становится непонятнее... |
| Автор: SneG0K 6.9.2010, 11:25 |
и в итоге при проверке переводят в нижний регистр Добавлено через 2 минуты и 31 секунду Так-с! Давайте эту тему ко мне во флейм |
| Автор: Muerto 6.9.2010, 11:28 |
| enoff, Вы в гугле поиск сделайте, http://www.autobaza.ru/search.php и поймете что я здесь никому ничего не обновил, может только открыл нечто новое для тех кто не знаком с XSS , и что через него можно поднять ТИЦ SneG0K, Ну в нижний регистр это уже ужас, я так на своих проектах никогда не делаю Но не люблю когда в логине на форуме есть симфолы вроде #!@%^ нафиг такое разрещать? у нас тут че демократия? Программирование это диктатура, и диктатор здесь я © |
| Автор: SneG0K 6.9.2010, 11:29 | ||
Напомните мне, когда это мы говорили про логин? Добавлено через 29 секунд
Так это еще и не ты нашел Добавлено через 1 минуту и 15 секунд Через него не только ТИЦ поднимают. |
| Автор: Muerto 6.9.2010, 11:35 |
| Давайте как то ближе к теме! Значит судя по вашим словам, свои классы писать смысла нету, если можно найти готовое в гугле? |
| Автор: SneG0K 6.9.2010, 11:39 |
Смысл только ради обучения! Zend_Db представляет функционал намного удобней, чем ваш этот. Есть еще смысл, когда заказчик требует полностью без использования левых компонентов, но в таких случаях я тоже ориентируюсь на уже готовые решения. |
| Автор: cutwater 6.9.2010, 11:39 | ||
Кривые и велосипедные именно. Когда то что вы делаете реализовано по человечески при помощи mysqli, PDO, yet another Wpapper / ORM. Когда prepared statements реализованы на уровне движка БД и таки имеют смысл и оптимизируют одинаковые запросы с различиями в параметрах, в отличие от Вашего велосипеда, который кроме того же еще и имеет не очевидный дизайн и кроме вас никому не нужен. |
| Автор: Muerto 6.9.2010, 11:50 | ||||||
| cutwater, Ну если мы оставим таких гигантов как ZEND где вы толком один файл который у него там за работу с базой и не найдете, ну по крайней мере я не нашел... Мой класс работает с базой данных через mysqli использует ооп модход работы с mysqli Он облегчает процесс фильтровки данных функцией mysqli_real_escape путем do_query + escape Он умеет подготавливать выражения, причем не нужно сразу указывать
А можно делать нечто
Но ведь мы хотим (?,?,?,? и это то что мы заготовили, а добавил я только один, как оно работать будет? Дальеш можно по одному, а можно просто список дать
И затем $db->ar_bind($types,$params) $db->bind_params(); мы закрываем этот процесс, и это сделает нам bind_param со всеми нашими параметрами если мы изменем $types,$params то изменим и параметры, как если бы мы делали это в ручную И дальше тупо $db->execute(); |
| Автор: cutwater 6.9.2010, 11:52 | ||
Вы сломали мой парсер.... |
| Автор: SneG0K 6.9.2010, 11:55 |
Согласен. Тупо! |
| Автор: Muerto 6.9.2010, 11:56 |
| cutwater, Судя по вашему сообщению, вы думайте что я изобретаю mysqli? нет! Я всего лишь использую mysqli через мой класс, я ничего особого не изобритаю, кроме как решение самых обычных и распостраненых задач что и видно с описания класса и его функций он может работать как с mysqli так и с PDO или с mysql Я думаю и с текстовым файлом тоже можно... смысл в том что я всегда смогу сменить |
| Автор: enoff 6.9.2010, 11:57 | ||
действительно
И часто вы так запросы составляете, как постом выше? |
| Автор: Muerto 6.9.2010, 12:00 | ||||
Ну а кто против? так конечно же можно делать, и возможно нужно иногда Но если вы строите класс, то вам нужно как то обобщить эти случая а что если мне нужно завтра не два параметра а 30? |
| Автор: enoff 6.9.2010, 12:03 |
| Muerto, и в чем проблема? функция принимает неопределенное количество параметров, формирует запрос исходя из плэйсхолдеров и параметров, после запроса. |
| Автор: gta4kv 6.9.2010, 12:39 | ||
Добавлено через 3 минуты и 40 секунд Насчет "не ООП", ну так вот - засунуть все стандартные функции mysqli в свой класс это не есть ООП. |
| Автор: Muerto 6.9.2010, 12:46 |
| gta4kv, опять же, что такое ооп по вашему? |
| Автор: gta4kv 6.9.2010, 12:53 |
| Я не умею умные длинные посты писать, но, еще раз повторюсь, сделать класс который будет выполнять стандартные функции под другим именем это кривой велосипед на предыдущих страницах писали - что понимание придет со временем |
| Автор: Muerto 6.9.2010, 13:18 | ||||
| gta4kv, значит во первых вы считайте что вспомогательные классы это не ооп, и право на жизнь не имеет? и мне каждый раз общение с базой с нуля нужно делать на основе чистой mysqli ? Далее, с чего вы взяли что все что мой класс делает это лишь использует mysqli и ничего более? Как бы если я впишу $db->do_query("myquery",1); то вы считайте что метод в классе выглядит вот так:
А на самом деле вот так:
Т.е. если бы я взял ваш подход, то при каждом запросе я бы писал заново с нуля все что у меня под "на самом деле" Здесь же есть класс который все это делает для меня, и сокращает код с 1000 строк до 100, и это плохо да? |
| Автор: cutwater 6.9.2010, 13:22 | ||
| По-моему поциенту уже объясняли что открывать соединение с базой необходимо в начале и не париться по поводу этого каждый раз при выполнении запроса. Добавлено @ 13:25
И все таки, что курил автор? |
| Автор: gta4kv 6.9.2010, 13:27 |
| Да это точно supervladislav, забейте. |
| Автор: Muerto 6.9.2010, 13:30 |
| cutwater, Да вы это говорили и не раз, можете это проигнорировать, это лично мое предпочтение Я так делаю потому что я лентяй, у этого есть все же свои преимущества но теоретически я бы мог в функции init_conn создавать подключение в конце объявления параметров... В функции __construct я это делать не могу потому что у меня сотни баз данных с разными паролями, максимум что я могу это использовать ini файл или что то другое откуда constructor будет данные грузить, или даже с класса Vars Но пока что я работаю без ini, хоть и класс ini_Parser я написал... Добавлено @ 13:31 gta4kv, вы общаетесь с http://www.facebook.com/dckurushin , я здесь на форуме не первый год и не первую тему создаю |
| Автор: cutwater 6.9.2010, 13:34 | ||
Сударь не слышал о параметрах? Для одного сайта штоле? Какой-то бред откровенно говоря. В который раз убеждаюсь в бесполезности общения с поциентом. Удачи =) |
| Автор: Muerto 6.9.2010, 13:37 | ||||||||||||
cutwater, Да таки криво, я когда цитировал прибавил , что бы выглядело как то поумней и допустил ошибку
настоящий оригинал был такой: Тоже не фонтан но все же
А сейчас подумал лучше всего таки оставить старое с добавкой потому что trigger все равно что сделать exit, и будет висеть подключение
Добавлено @ 13:41
Какие параметры могут быть у функции
Обявление идет такое: $db=db_class::getInstance() И кто сказал вам что у меня один сайт? с 100 базами? у меня много сайтов, просто я раньше как то их все строил в процедурном стиле |
| Автор: cutwater 6.9.2010, 13:42 |
Жесть... как представлю что такой printf сработает на боевом сайте.... Сударь не слышал об исключениях? Хотя да я забываю, что сударь слышит только свое едино верное мнение.... зачем я тут перед ним распинаюсь. Все равно больше ###кода хорошего и разного. |
| Автор: Muerto 6.9.2010, 13:45 |
| cutwater, вы про try catch? Я считаю что если разработчик допустил ошибку скрипт нужно останавливать, или же если произошел сбой на сервере... в других случаях exit никогда не случиться Возможно со временем как тут многие пишут, я пойму что я не прав, и это как шоу, когда один из героев умер от инфаркта, продолжается все равно |
| Автор: cutwater 6.9.2010, 13:48 | ||||
в 10й раз повторяю об инициализации базы в начале. из конфига, из переменной whatever.... если так не хочется открывать соединение заранее, да пожалуйста, вызывайте где угодно. параметры можно запомнить. НО это хреновый дизайн. Ибо писать нормально вы упорно отказываетесь...
Да потому что проблемы на пустом месте... проблемы с параметрами, не можете их передать где надо. Или зачем тогда было говорить про сотни баз с разными паролями. На сим откланяюсь. У меня о Вас сложилось вполне четкое мнение, и больше тратить свое время без пользы на Вас не намерен. |
| Автор: gta4kv 6.9.2010, 13:51 | ||
http://phpfaq.ru/error Это насчет ошибок. Написанное выше бред. Остановить скрипт - да, но выведенная ошибка - ###. |
| Автор: Muerto 6.9.2010, 13:51 | ||||||
А может я вовсе не умею? и вы вашими советами мне ничем не помогайте кроме как сказать что вы можете хорошо а мое ###? Тут история вообще такая Мой стиль жизни экономный: У меня есть тачка снизу рядом с домом, я выйду заведу и поеду... А у вас стиль жизни другой: У вас тачка стоит рядом с домом и уже заведенная, и вы не думайте о том что возможно вы сегодня никуда не поедите и бензин сгорит зря!!! ИМЕННО ОБ ЭТОМ РЕЧЬ Это и есть самая разница между просто объявить объект класса, или объявить его и создать подключение, без учета того будем делать запросы или нет Добавлено @ 13:54
Не исключено , пообедаю и почитаю как правильно нужно делать, там чет опять trigger промелькнул... надо будет глянуть... Вообще мне лично не понятно (я ещё не читал то что дали) , я очень боюсь разных trigger ибо если подключение открыто, а например в вашем подходе оно будет всегда открыто с самого начала, то если мы работает с mysqli подключения сами закрываться не будут в конце работы скрипта в отличии вроде от mysql , и поэтому у нас быстро достигнется maximum connection Если вы захотите в подобную тему не лишь бы почувствовать насколько вы лучше и обосрать, то если демонстрировать как это делать вы не хотите, хотя бы давайте ссылки на толковые статьи! |
| Автор: enoff 6.9.2010, 14:08 |
| советов дано огромное множество, все равно все по-своему. Что такое ООП? Читайте Гради Буча, я ссылку привел. Добавлено через 23 секунды |
| Автор: Muerto 6.9.2010, 14:18 |
| Кстати на настоящих сайтах где есть норм посещения, у меня вообще все по другому работает.... Я все же скрипт все равно обрываю, но перед этим, я пишу в error log (текстовый файл на сервере) Ошибку, и потом я могу посмотреть когда она произошла, на какой странице с какими параметрами, и код ошибки... |
| Автор: gta4kv 6.9.2010, 14:18 | ||
Что мешает в __destruct сделать проверку - открыто ли соединение и закрывать его? |
| Автор: Muerto 6.9.2010, 14:21 |
| gta4kv, Вы должны понять что у меня сильная нехватка знаний. Я очень плохо знаком с __destruct Из того что я читал и слышал, она срабатывает когда мы на объект делаем unset Но если мы делаем trigger или exit , скрипт обрывается (не на 100% уверен насчет trigger, но вроде так)... Если я читал в левых источниках, и когда скрипт останавливается не важно как, и создан объект класса, будет вызван __destruct то тогда вы однозначно правы, и я так и сделаю, ибо такой подход проще и лучше... сейчас почитаю |
| Автор: gta4kv 6.9.2010, 14:22 | ||
| Тут поможет документация. http://ru.php.net/exit
|
| Автор: Muerto 6.9.2010, 14:24 |
| gta4kv, Я сформирую вопрос немного иначе... Когда скрипт обрывается, или заканчивает выполнение автоматический вызываются __destructor всех созданных объектов? Вы процитировали will always be executed even if exit() is called. А если exit not called а called trigger_error / скрипт просто закончился |
| Автор: gta4kv 6.9.2010, 14:25 |
| см. выше. там есть ответ на вопрос Добавлено через 7 минут и 3 секунды как бе, вызываешь триггер еррор и потом экзит. |
| Автор: Muerto 6.9.2010, 14:43 |
| gta4kv, Спасибо, поигрался немного с __destruct при разных условиях и понял что к чему У меня кстати целый домейн зареген чисто ради тренеровок =-) http://learn-php.ru Вот только осталось понять когда и как его использовать... Вроде бы при работе с БД, самое то... Но когда у нас класс вроде ini_Parser то все что у нас есть в классе это массив который содержит данные ini и через __destruct мы просто можем освободить память как бы... но есть ли в этом какой то смысл? или скрипт сам освобождает память в конце выполнения что скорее всего так и есть? Судя по http://stackoverflow.com/questions/2251113/should-i-use-unset-in-php-destruct , кроме как закрытия подключений не нужно... |
| Автор: gta4kv 6.9.2010, 14:55 | ||||
Ответ по твоей же ссылке6
|
| Автор: Muerto 6.9.2010, 14:56 |
| gta4kv, угу, я так и сказал "кроме как закрытия подключений не нужно..." |
| Автор: cutwater 6.9.2010, 16:35 | ||
Кроме того не знаю откуда вы взяли, что mysqli работает не так как mysql. После выполнения скрипта PHP закрывает все открытые соединения к базе данных, так что ваши беспокойства по поводу утечки соединений напрасны и необоснованы. |
| Автор: Muerto 6.9.2010, 16:38 |
| cutwater, Вот в этой теме обсуждалось http://forum.vingrad.ru/forum/topic-308721.html Я когда разрабатывал один из скриптов выскакивали ошибки которые остонваливали скрипт без вызова kill + close поэтому мне удалось дойди до предела... и вот как бы выходит что автоматом там не закрывает при определенных условиях |
| Автор: cutwater 6.9.2010, 16:42 |
| Ну быть может тут я не прав, в таком случае конечно mysqli не совсем может быть удобен. Однако насколько я знаю уже в PDO решили эти проблемы и он вполне юзабелен. Я с mysqli на практике не сталкивался, работал с PDO и mysql, поэтому таки могу и ошибаться. |
| Автор: Muerto 6.9.2010, 16:49 |
| cutwater, Кстати если подумать так, то без вспомогательного класса вроде моего через который я использую mysqli, не только что нужно писать больше кода каждый раз, а ещё и нету __destruct и надо следить за закрытием каждый раз... а это фактически не возможно, потому что и другие классы и методы могут выкинуть свои ошибки после открытия подключения... __destruct конечно супер тема, как то я им активно не пользовался раньше... |
| Автор: cutwater 6.9.2010, 16:51 |
| В динамических языках деструкторы мало применяются, так как время жизни объекта нельзя контролировать. Для этого есть PDO, посмотрите, полезно будет. Добавлено через 44 секунды При чем обертка не только для mysql, что тоже нельзя не исключать. Вы все еще используете mysql? тогда мы идем к вам =) |
| Автор: gta4kv 6.9.2010, 16:53 | ||||
я кстати не понимаю, зачем ты в каждый класс добавляешь getInstance когда можно сделать самый простой класс для синглетона:
Добавлено через 1 минуту
Используем. |
| Автор: cutwater 6.9.2010, 16:58 | ||
С учетом того что паттерн Singleton зло, то применять его необходимо крайне осторожно и максимально редко. Поэтому обычно хватает одного на приложение. Если уж совсем никак без глобальных переменных. Кроме как для работы с базой в php не знаю где еще может пригодиться. Не встречал на практике, хотя может быть уже и не помню. Хотя еще и настройки... Другое дело что, например, в python-фреймворке svarga используется концепция environment (окружения), что есть по сути глобальный объект, хотя как один глобальный синглтон для приложения не назови, смысл не изменится. |
| Автор: gta4kv 6.9.2010, 17:10 |
| С какой это стати Singleton зло? |
| Автор: cutwater 6.9.2010, 17:19 |
С такой же, с какой и применение глобальных переменных. Неосторожное его применение может повлечь за собой неочевидные последствия. |
| Автор: SneG0K 6.9.2010, 18:32 | ||||||
Круто, а у меня на ноутбуке стоит виртуалка с линуксом на борту Ну, как вам сказать... Вот когда будете писать какой-нить скрипт (типа парсера), который будет работать круглые сутки, тогда поймете какой в этом смысл
См. выше Да? С какой это?
Эмммм... Вот как-то не чувствую связи между сингелтоном и глобалками? Сингелтон это не анти-паттерн как-бэ) |
| Автор: Muerto 6.9.2010, 18:32 |
| gta4kv, Т.е. вы вашим классом предлагайте что бы некий общий класс хранил в себе все singleton моих классов и выдавал их когда нужно? SneG0K че внатуре? у меня тоже vmware centos 5.5, только кроме этого и vds есть, то что дома и "реал" работают немного иначе, например в той сборке что у меня htaccess не пашет! |
| Автор: SneG0K 6.9.2010, 18:34 |
| gta4kv, если уж на то пошло, то я бы сделал для каждого паттерна свой класс. Т.е. BasicSingelton, BasicFactory. Добавлено через 1 минуту и 6 секунд Ну, если обе руки левые... |
| Автор: Muerto 6.9.2010, 18:49 | ||
Увы, даже apc на это левую сборку поставить не смог, в php.ini все включено а на деле не пашет =-) |
| Автор: SneG0K 6.9.2010, 18:55 | ||
Ну, так разберись хотя-бы с этим, а потом уже пиши велосипеды. |
| Автор: cutwater 6.9.2010, 18:56 | ||
Я лишь говорил о чрезмерном и неумелом его употреблении. Поверьте встречается и такое. Связь с глобальными переменными самая прямая, только и того что Singleton более управляем. Так как этот объект глобален, это порождает побочные эффекты функций, что в свою очередь может повлечь за собой трудноуловимые проблемы. Поэтому все хорошо но в меру. Кроме того, так как из-за существования глобальных объектов поведение функции бывает трудно предсказать, что влечет за собой проблемы при покрытии и тестировании кода. |
| Автор: Muerto 6.9.2010, 19:01 | ||||
Когда на форуме никто причины не знает, и во всем гугле люди жалуются на подобную проблему без ответа, Я не собираюсь тратить больше времени чем потратил на это. если бы я линукс с нуля ставил я ещё понимаю, а так один хер знает что там напихали, и почему оно не пашет мне никто не скажет По поводу factory и singleton... А грех ли это их совмещать? Как бы singleton может и сам инклюдить библиотеку которую я хочу создать... |
| Автор: cutwater 6.9.2010, 19:05 | ||
/dev/head /dev/hands |
| Автор: Muerto 6.9.2010, 19:12 | ||||
Ну тебе повезло, как родился так со знаниями php, и управлением серверов и тп. |
| Автор: SneG0K 6.9.2010, 19:13 |
| Обалдеть, не установить на линукс апач и php |
| Автор: Muerto 6.9.2010, 19:14 | ||
Это ты кому? у вас тут мания виличия о обсирания ? о великие ? |
| Автор: cutwater 6.9.2010, 19:15 |
казалось бы при чем тут php.ini к .htaccess ? Вам к этому больше нечего добавить? @see http://www.rsdn.ru/Info/Howtoask.xml |
| Автор: SneG0K 6.9.2010, 19:16 | ||
Он родился с левой и правой рукой, а еще с головой. "тыкать" друзьям свои будешь! Думаешь, тут пишут люди тупее тебя? Когда тебе что-то говорят, прислушивайся, а не корчи из себя неизвестно что! |
| Автор: cutwater 6.9.2010, 19:17 |
Кто виноват, ести ТЫ ниасилил? Да вы хам, сударь. На ты вам никто обращаться не разрешал. Учитесь уважению, общению в интернетах, правильной реакции на ответы вам. И читайте ссылку что я дал выше. |
| Автор: SneG0K 6.9.2010, 19:18 |
У него наверное .htaccess на nginx не работает и никто не знает почему! |
| Автор: Muerto 6.9.2010, 19:24 |
| Да вы ещё убейте за то что я вас в php.ini послал а не в httpd.conf или ещё куда то. (кстати htaccess уже пашет, благо есть норм форумы ещё) Тема закрыта, форум флудеров, нефига по делу не скажут не помогут, только срач и флуд |
| Автор: SneG0K 6.9.2010, 19:33 |
Нас еще и послали |
| Автор: cutwater 6.9.2010, 19:43 |
Да уж... надо открывать на форуме заповедник особо адекватных людей. =) |
| Автор: Muerto 6.9.2010, 19:44 |
| Вот ваше истинное лицо! Человек возможно плохо знает php, а вы его идиотом обзывайте, ну-ну ![]() Дружелюбный форум... Насколько я помню это раздел общих вопросов а не профи... |
| Автор: cutwater 6.9.2010, 19:46 |
| Muerto, что ж у нас приличный форум, обстоятельства не позволяли сказать это как бы при всех. А давно хотелось. Если бы Вы были не настолько глупы, и умели осознавать свои ошибки, возможно были бы более успешны и в изучении php. Вас же никто не винит за "незнание", но за ваше отношение. |
| Автор: SneG0K 6.9.2010, 19:46 |
| Muerto, если человек плохо знает PHP, то какого хрена он не слушает более опытных людей? У меня бабушки такие под подъездом сидят, то нихрена не знаю, но считают что самые опытные |
| Автор: Muerto 6.9.2010, 19:52 |
| Если вы почитайте ваши ответы мне, то вы увидите что вы мне информативных ответов не даете, а только говорите : какой я тупой, плохой, и что я нифига не понимаю, а мы тут такие крутые, и умные, и все знаем, неужели не видно с наших слов что мы все знаем и как нужно делать? А вы знайте? не видно! пока что 95% ваших сообщений это само хваление и наезд на человека который не разу и не утверждал что он профи Кстати это относиться к двум ораторам выше меня, другие как правило отвечали по делу и с примерами |
| Автор: SneG0K 6.9.2010, 19:55 |
| Вам уже давно ответили, что вы пишете кривой велосипед и предложили посмотреть уже готовые классы, а вы все продолжаете утверждать, что "длиннее" у вас, даже не глянув на другие реализации. Добавлено через 1 минуту и 49 секунд Окей, даже если "два оратора выше" не дали информативных ответов, то остальные участники дискуссии уже давно привели факты с примерами и все равно для вас этого было мало! |
| Автор: gta4kv 6.9.2010, 20:01 |
| Что вы до человека докопались, он, между прочим, вам не хамил, а только отстаивал свою точку зрения. От тебя, SneG0K, точно такого не ожидал. Вот вроде умные люди, даже слова какие умные были, а ведёте себя как детсадовцы не сильно развитые. |
| Автор: SneG0K 6.9.2010, 20:09 |
| gta4kv, ты прав. Действительно что-то я разошелся. Muerto, извини, ты к этому еще и сам дойдешь. |