Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Оцените, укажите на ошибки пожалуйста. Класс для работы с базой.

Сообщения:  [1-10]   [11-17] 

 
 автор: nikita2206   (15.05.2010 в 13:03)   письмо автору
 
   для: Тень*   (14.05.2010 в 23:51)
 

> Вообще, в $_GET/$_POST/... могут быть массивы.
Ну и пусть идут лесом... Неправильно это. http предполагает передачу ключ-значений, а не массивов, на крайняк - в качестве значения указать json-овый массив или сериализованый...

> $mysql->magicQuotes = FALSE;
А это вообще надо выкинуть нафиг, неужели непонятно?

Ну здесь ясно, да.

  Ответить  
 
 автор: nikita2206   (15.05.2010 в 12:53)   письмо автору
 
   для: Николай2357   (15.05.2010 в 10:51)
 

1. С этим довольно легко разобраться, наверно как-раз в ближайшее время и буду пробовать...

2. Вот то что я хотел услышать с самого начала... Буду делать.

3. С бэктрейсом буду смотреть, а errorMessage можно выставить в пустую строку... Она выводится только если $this->debug = false

4. Вот честно незнал, а меня давно доставали эти нумерованные поля, спасибо.

5. -

6. я думаю в таком случае как-раз эти вопросики использовать не надо, а вставить запрос именно так как написали Вы...

7. Да, у меня с sql не очень, многого не знаю, как и про эти игнор и апдейт...

8. Бывает необходимо вставить число, но обернуть его в кавычки (Вы же пользовались enum/set)...

> Про ресурсоемкость и изрядное торможение говорить вообще не приходится.
Кеширование рулит:)

  Ответить  
 
 автор: Николай2357   (15.05.2010 в 10:51)   письмо автору
 
   для: Николай2357   (15.05.2010 в 00:59)
 

Ну, а чтобы мне не инкрменировали троллизм, пару комментов по делу присовокуплю.

1. Уж коль скоро делается класс для работы с SQL запросами, не стоило циклиться на одной mysql_ К тому же это не самая перспективная библиотека. Основной смысл подобных изобретений как раз в том, чтобы безболезненно использовать разные базы данных, которым не чужд SQL

2. В таком большом и громоздком классе почему то не нашлось места установке кодировки соединения. А это очень важный момент, раз уж это класс. То бишь решение универсальное.

3. Смысл метода add_report для меня остался за кадром. Если это претензия на дебаггер, то он совершенно не информативен. Ну выдаст он ошибку SQL, а источника заразы не видно. Тогда уж стоило подумать о функции debug_backtrace(), из которой можно извлечь массу полезного. Полный адрес запроса, его текст и т.д. А если это для логирования подозрительных внешних поползновений, то для чего эта строка?
<?
echo $this->errorMessage
Показать хакеру, что таки да, уязвимость где то есть, можно продолжать изыскания?

4. Метод fetch. Там используется mysql_fetch_array() без флагов. Она возвращает два массива в таком случае - для чего?

5. Про магические кавычки сказали уже.

6. Про вопросики. Тут претензия на PDO, это понятно. Не понятно другое, я сильно не вникал правда. Как вот такой запрос туда упихать, в вопросики эти?
<?
   
"SELECT * FROM table WHERE `id` IN ("implode(','$id_array) .")"
я уже не говорю о более сложных вариантах. И вообще, чем удобна такая форма извращений?
Вот представьте себе запрос на 30-50 строк (а то и больше), в котором используется 20-30 переменных... А если там еще ON DUPLICATE KEY UPDATE, то многое придется дублировать. Всычитывать местоположение каждого вопросика и искать сопоставление ему переменной - сущий ад.
Этот способ (да собственно как и весь класс) удобен(?) только на элементарных запросах, которые ну совершенно не требуют столь громадных обработчиков.

7. В примере использования показана только выборка. А как работает INSERT INTO?
При беглом просмотре кода я не нашел возможности использовать такие вещи как IGNORE или тот же крайне полезный ON DUPLICATE KEY UPDATE, да и еще кучу всяких вкусностей... Может я упустил чего, но меня терзают смутные сомнения, что сия конструкция сильно сужает возможности SQL. И главное - совершенно не понятна цель всего этого.

8. если аргумент имеет строковый тип, то если он "numeric", он
просто оборачивается в кавычки

совсем ничего не понял... Так строковый или нет? И зачем нужно числовые (целочисленные) значения в кавычки?

Про ресурсоемкость и изрядное торможение говорить вообще не приходится.

А раз так, то нет смысла и вникать глубже. И этого достаточно было бы для того, чтобы немедленно забыть о таком изобретении, как о страшном сне.

  Ответить  
 
 автор: Николай2357   (15.05.2010 в 00:59)   письмо автору
 
   для: nikita2206   (14.05.2010 в 22:23)
 

Я в таком случае сделаю так, как сделано все остальное на этой страничке, там ведь тоже какая-то инфа выводится? А если я изначально делал эту страничку, то воспользовался бы каким-то подобным решением, т.к. городить например такие конструкции, это по-моему верх идиотизма:
Каждому своё. Я лично считаю верхом идиотизма совать нормально работающие штатные функции в три фуфайки классов и оберток, чтобы выглядело круто, как первый парень на деревне. Кроме улыбки эти поползновения все автоматизировать километрами кода ничего не вызывают. Ну если со стороны конечно. А если приходится разгребать этот бедлам, выдаваемый за красоту и рациональность, то кроме матов.

Отсюда следует, что не
Бывает лучше что-то один раз усвоить, чем писать то, что на пару строк выше.

Потому что изобретателей вагон и маленькая тележка. И у каждого свой, ну конечно же самый лучший, синтаксис. И мне нужно немедленно забыть все, что знал до этого и изучать новые методы, потому что кто то посчитал штатные php функции верхом идиотизма. И изобрел свои, естественно гениальные и супероптимальные.

Если бы в пхп было что-то очень удобное, функциональное, при этом с использованием MVC и "ооп-головного мозга" изначально
Слава Богу, что нет. Я не хочу уподобляться секретарю-машинистке. которая просто набирает тексты в ворде, который сам все (вплоть до орфографии) за неё сделает. Я хочу быть программистом, а не копипастером.
Изобретать велосипеды - да, это гут. Я писал об этом. Для себя, любимого. А вот юзать чужие наработки, Ваши или будь то трижды прославленного ZEND - удел лентяев и штамповщиков.

Так что мечты у всех разные))) Я мечтаю, что бы люди поскорее прозрели и поняли, что ООП- парадигме нет места в веб-строительстве. Есть ничем необоснованный миф, лоббируемый тем же зендом. Не имеющий никакой практической пользы.

Я имю ввиду PHP, а не весь веб. Если уж что то строить с применением ооп, то есть куда более другие инструменты, питон тотже или рельсы. ))

  Ответить  
 
 автор: Тень*   (14.05.2010 в 23:51)   письмо автору
 
   для: nikita2206   (14.05.2010 в 23:45)
 

Вообще, в $_GET/$_POST/... могут быть массивы. Это типа замечание...

> $mysql->magicQuotes = FALSE;
А это вообще надо выкинуть нафиг, неужели непонятно?

  Ответить  
 
 автор: nikita2206   (14.05.2010 в 23:45)   письмо автору
 
   для: Тень*   (14.05.2010 в 22:46)
 

ну короче вижу один нормальный выход: в htaccess прописать что-то вроде MagicQuotesGPC Off (точно не помню что писать)... в инициализации скрипта написать что-то такое:
<?
if(magic_quotes_gpc()) $_GET array_map(function($str){
    return 
stripslashes($str);
}, 
$_GET);

$mysql->magicQuotes FALSE;

  Ответить  
 
 автор: Тень*   (14.05.2010 в 22:46)   письмо автору
 
   для: nikita2206   (14.05.2010 в 22:11)
 

> Или может ты предлагаешь стрипслэшить все входные данные сразу, как некоторые делают

Это да. А какое это отношение имеет к базам данных, запросам? Объект твоего класса MySQL ничего не должен знать об источнике данных. Соответственно, заботиться об "стрипслэшенье" (гы гы) надо вне этого объекта.

  Ответить  
 
 автор: nikita2206   (14.05.2010 в 22:23)   письмо автору
 
   для: Николай2357   (14.05.2010 в 20:49)
 

> Вот по порядку. Если мне нужен на страничке один мааалюсенький запросик. Допустим вывести количество посещений. И для этого я должен инициализировать такой огромный объект, в котором 99% функционала - мертвый код. На кой оно?

Я в таком случае сделаю так, как сделано все остальное на этой страничке, там ведь тоже какая-то инфа выводится? А если я изначально делал эту страничку, то воспользовался бы каким-то подобным решением, т.к. городить например такие конструкции, это по-моему верх идиотизма:
<?
$result 
mysql_query('SELECT `a`, `b`, `c` FROM `table` WHERE `d` = \''.mysql_real_escape_string($blabla).'\'');



> Плюс новый синтаксис, который нужно усвоить.
Бывает лучше что-то один раз усвоить, чем писать то, что на пару строк выше.

> Я никогда не стану слепо доверять какому то бы нибыло фреймворку. Пусть сто раз с пеной у рта доказывают о пользе инкапсуляции. То, чем я не могу управлять, вызывает подозрение и дискомфорт.

Абсолютно согласен. Именно поэтому наверное и рождается столько велосипедов типа моего... Если бы в пхп было что-то очень удобное, функциональное, при этом с использованием MVC и "ооп-головного мозга" изначально, то-есть из коробки, типа дотНета, может было бы меньше велосипедов и люди пользовались бы всем готовым... Но это, видимо, только в мечтах...

  Ответить  
 
 автор: nikita2206   (14.05.2010 в 22:11)   письмо автору
 
   для: Тень*   (14.05.2010 в 20:50)
 

Да, здесь было напряжно, подскажи другой выход? Или может ты предлагаешь стрипслэшить все входные данные сразу, как некоторые делают. Не знаю я как по-другому сделать...

  Ответить  
 
 автор: Тень*   (14.05.2010 в 20:50)   письмо автору
 
   для: nikita2206   (14.05.2010 в 20:38)
 

Какое отношение имеет magic_quotes_gpc к работе с базой данных? Вот допустим, включён этот режим. Теперь ты вообще не будешь экранировать спец. символы? Откуда ты знаешь источник данных?

Вообще, закрыв глаза на саму необходимость ЭТОГО, тут и других недочётов полно.

  Ответить  

Сообщения:  [1-10]   [11-17] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования