Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Класс для работы с MySQL, class DB [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): « 1 [2]   

> Описание: PHP
Мелкий Супермодератор
Отправлено: 12 Марта, 2011 - 20:59:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DeepVarvar пишет:
Эти данные никогда не выводятся на страницу - они посылаются в запросе к БД.

У вас база называется /dev/null ? Раз данные никогда не выводятся Подмигивание

А что вообще в конечном итоге делает класс? Только чтобы сделать класс?
защиты данных - нет
абстракции от драйвера СУБД - нет
возможности в случае нужды поднять второй линк к БД (например, к другому серверу) - нет
только форматирование результата в массив - 1 функция.
защиты от создания второго соединения по одним и темже параметрам - нет.
сокращение кода - нет

(Отредактировано автором: 12 Марта, 2011 - 21:04:01)



-----
PostgreSQL DBA
 
 Top
Champion Супермодератор
Отправлено: 12 Марта, 2011 - 21:11:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Мелкий пишет:
У вас база называется /dev/null ? Раз данные никогда не выводятся
Черная дыра))
Ниче, сейчас DeepVarvar учтет все пинки и сделает мега класс для работы с БД.
 
 Top
ALEN Модератор
Отправлено: 12 Марта, 2011 - 22:02:15
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




1) Забыл про mysqli
2) Ленивый я, чтоб каждую переменную проводить через функцию, было бы хорошо, если бы за меня делалось бы.
3) Лучше, чтоб передавался идентификатор подключения к БД, а не логин, пароль и т.д.
4) Возвращение массива лучше по запросу, а так просто отдавать результат, как от mysql_query
 
 Top
Мелкий Супермодератор
Отправлено: 12 Марта, 2011 - 22:38:47
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




ALEN пишет:
3) Лучше, чтоб передавался идентификатор подключения к БД, а не логин, пароль и т.д.

нет, не согласен. Зачем тогда класс, если соединение устанавливать отдельно?

ALEN пишет:
4) Возвращение массива лучше по запросу, а так просто отдавать результат, как от mysql_query

Согласен. И метод-обёртка для mysql_fetch_assoc. Всё равно же в цикле как правило пробегать ответ.

Для защиты от SQL инъекций мне больше всего симпатизирует реализация такой функции: первый обязательный аргумент - текст запроса, любое количество следующий - данные, вставляющиеся в запрос после прохождения mysql_real_escape_string, например, через sprintf.
В таком случае защита получается ненавязчивой и можно как самому, так и автоматикой экранировать данные.


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 12 Марта, 2011 - 22:59:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Champion пишет:
Ниче, сейчас DeepVarvar учтет все пинки и сделает мега класс для работы с БД.

Не сейчас, а со временем.
Champion пишет:
необходимо? Так же не бывает.

Ситуация:
Произошла ошибка. Записана в лог-массив.
Далее в коде несколько условий if (error::$init)
Как сделать чтобы оно в одном из них (в зависимости от необходимости) не сработало?
Мелкий пишет:
У вас база называется /dev/null ?

Нет, Champion неверно выразился. Смотрите код.
Мелкий пишет:
защиты данных - нет

Вход? Выход? Внутренний приват?
Мелкий пишет:
абстракции от драйвера СУБД - нет

Тут подробнее, пожалуйста.
Мелкий пишет:
возможности в случае нужды поднять второй линк к БД (например, к другому серверу) - нет

И не предусматривалось.
Мелкий пишет:
защиты от создания второго соединения по одним и темже параметрам - нет.

Именно этим сейчас занимаюсь.
ALEN пишет:
Возвращение массива лучше по запросу

Сначала не подходило то, что возвращалась переменная если 1 ров и 1 филд.
Теперь и выбор не устраивает?

З.Ы. Ни грамма негатива в вашу (это всем) сторону. Закатив глазки
(Добавление)
Мелкий пишет:
мне больше всего симпатизирует реализация такой функции: первый обязательный аргумент - текст запроса, любое количество следующий - данные...

Допер до этого сам... Переделываю...
 
 Top
Мелкий Супермодератор
Отправлено: 12 Марта, 2011 - 23:23:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




DeepVarvar пишет:
Вход? Выход? Внутренний приват?

Имелась в виду, конечно, автозащита. Входных от SQL-инъекций.

DeepVarvar пишет:
Тут подробнее, пожалуйста.

Глючу, да. Абстракция как раз есть, возможно сменить только класс при сохранении внешнего API для доступа, например, через mysqli.

DeepVarvar пишет:
Сначала не подходило то, что возвращалась переменная если 1 ров и 1 филд.
Теперь и выбор не устраивает?

и как с людьми жить, да?

Кстати, сделай __destruct с закрытием коннекта. Всё-таки так кошернее, когда коннект закрывается Улыбка


-----
PostgreSQL DBA
 
 Top
Champion Супермодератор
Отправлено: 13 Марта, 2011 - 07:25:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




DeepVarvar пишет:
Далее в коде несколько условий if (error::$init)
Как сделать чтобы оно в одном из них (в зависимости от необходимости) не сработало?
Это чтение свойства. Можно сделать публичный метод getInit(), который будет его возвращать.
Если свойство публичное, то я смогу его изменить в своей проге. Потом что-то может произойти некорректно, особенно, если методы класса этим свойством пользуются. Поэтому свойства нужно делать приватными. Есть конечно некоторые моменты, когда можно сделать их публичными, но тут не такой случай.
Самая главная штука ООП - инкапсуляция. Это значит, что класс скрывает все детали реализации и предоставляет пользователю легкий, не большой и понятный интерфейс к себе, но не более того. Класс, в котором есть публичные свойства при использовании вызывает чувство неуверенности и действия, производимые над этим классом плохо контролируются.

DeepVarvar пишет:
Сначала не подходило то, что возвращалась переменная если 1 ров и 1 филд.
Теперь и выбор не устраивает?
Ненене. Не понравилось сначала то, что функция ведет себя по-разному. А теперь пришло в голову улучшение: возможность возвращать не массив, а линк. Только лучше пусть это делает другая функция, а не всё одна с параметром.
Просто бывают случаи, когда пользователю нужно не просто получить строки таблицы, а каким-нибудь замысловатым способом. Тогда возвращать ему массив, чтоб он его потом перерабатывал - не оптимально
 
 Top
ALEN Модератор
Отправлено: 13 Марта, 2011 - 09:03:38
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Мелкий пишет:
нет, не согласен. Зачем тогда класс, если соединение устанавливать отдельно?

Как я должен использовать возможности MYSQL не описанные в классе? Или описанные не так, как мне нужно?

DeepVarvar пишет:
И не предусматривалось.

Плохо, мне очень часто, бывает необходимо работать с 2-3 базами, вот, как я буду работать.


P.S. Реально использование класса сейчас чем отличается от использования стандартных методов?
1) Данный класс только ограничивает стандартные возможности.
2) Защита от SQL - функция, в названии, немного короче: clean() и mysql_real_escape_string() - притом твой вариант менее стабильный будет.
3) Удобности пока действительно нет.
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB