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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: создание класса PHP работающего с таблицами MySQL
 
 автор: Nickiomen   (12.05.2013 в 05:16)   письмо автору
 
 

идея: создать класс, создающий, изменяющий, удаляющий, редактирующий... только что, не берущий их замуж...))) по одному только открытию сессии?
Не могу придумать структуру классов...
кажется опять с веткой промахнулси...

  Ответить  
 
 автор: cheops   (12.05.2013 в 09:31)   письмо автору
 
   для: Nickiomen   (12.05.2013 в 05:16)
 

Таких готовых систем очень много, называют их ORM. Все они, в том числе, которую вы разработаете с нуля будут менее гибкие и менее читабельными, чем чистый SQL - так как объектно-ориентированное программирование и SQL - это два разных решения в декларативном стиле - они очень, очень плохо сочетаются. Хотя бы по тому, что один оперирует объектами и сигналами, а другой - списками и операциями над ними. Т.е. математические модели, которые лежат в их основе разные. Поэтому придется много думать и много кодировать. Однако, лучше предварительно изучить готовые системы, тот же Doctrine и убедиться, что сложность никуда не девается.

  Ответить  
 
 автор: Nickiomen   (12.05.2013 в 15:08)   письмо автору
 
   для: cheops   (12.05.2013 в 09:31)
 

Ага, понятно. Спасибо! Только это скорее идея для саморазвития в PHP, чем рабочая версия библиотеки.

  Ответить  
 
 автор: cheops   (12.05.2013 в 17:47)   письмо автору
 
   для: Nickiomen   (12.05.2013 в 15:08)
 

Идея очень поучительная попробовать обязательно стоит, хотя бы чтобы на практике убедиться насколько это лютая задача и как многократные усилия и тонны кода не только не способствуют гибкости и скорости, а наоборот уводят почву из под ног. Ведь на ORM выросли целые поколения разработчиков, которые зачастую SQL-запросов почти не составляли... а оптимизация скорости требует понимания SQL и понимание что стоит за тем или иным классов (а оптимизация зачастую крайне проблематична).

Если будете делать, то лучше используйте подход, принятый в Ruby on Rails - они в принципе складируют в лог все SQL-запросы вместе со временем выполнения. В результате сразу видно узкое место и есть возможность подумать, как его исправить. Вот такой штуки в PHP явно не хватает.

  Ответить  
 
 автор: Nickiomen   (14.05.2013 в 11:05)   письмо автору
 
   для: cheops   (12.05.2013 в 17:47)
 

насколько это лютая задача и как многократные усилия и тонны кода не только не способствуют гибкости и скорости, а наоборот уводят почву из под ног.
И чего я сразу не поверил?))) То- что, красиво и читабельно- просто убивает сервак, а нечитабельный текст... а на кой он тогда нужен? С Руби не работал, не просветите в общих чертах?

  Ответить  
 
 автор: cheops   (14.05.2013 в 21:29)   письмо автору
 
   для: Nickiomen   (14.05.2013 в 11:05)
 

Против математики не попрешь :)

Руби - это язык японского происхождения, задумывался и создавался в 90-х, когда люди постепенно стали на стену лезть от С и Pascal-ей. Полностью обеъектно-ориентированный, что главное задумывался, именно как объектно-ориентированный, в отличие от PHP, в который объектно-ориентированный подход пришел после того, как язык сформировался. Конечно, с подвыподвертами, как и любая восточная вещь, но жить можно... поэтому язык устойчиво держит 10 место по интересу со стороны разработчиков (для сравнения PHP 6).

Каждый скриптовый язык, содержит флагманский FrameWork для работы с Web, у Python - это Django, у Ruby - Ruby on Rails, только у PHP их море разливное и силы сообщества раздраконены на миллион отдельных фреймворков. Через это у конкурентов PHP получаются очень мощные и продуманные системы, которые летают, плавают, стреляют.

Когда вы запускаете Ruby on Rails проект в режиме разработки, то пользуетесь, как правило, не Apache, а каким-нибудь легковесным сервером, вроде Brick или Thin, при этом лог вываливается в консоль, вместе со всеми SQL-запросами и временем выполнения. При разработке вы почти не составляете SQL-запросы (хотя фреймворк это позволяет и в случае сложных моделей это приходится делать). Пользуетесь ORM (по мнению экспертов одной из лучших). Однако вы можете наблюдать запросы в режиме реального времени и на языке SQL (т.е. вы видите, что вам ORM нагенерировала и можете вмешаться), более того, видеть время выполнения запроса сразу же и принимать меры по оптимизации. Я за свою жизнь оптимизировал массу SQL-схем, но нигде это не было так удобно, как в Ruby on Rails.

Вот если бы такой инструмент появился бы в PHP - всем бы было бы только лучше. Вы и задачу формирования SQL-запросов бы решили, и в наглядности бы не потеряли - SQL-запросы всегда перед глазами.

  Ответить  
 
 автор: Nickiomen   (14.05.2013 в 22:57)   письмо автору
 
   для: cheops   (14.05.2013 в 21:29)
 

Это конечно весьма удобно, но в то же время, если я правильно понял, означает переход на Руби. Что не есть правильно в моем случае. Распылять силы на два языка в планы пока не входит (с одним бы более менее разобраться).
А вот можно ли получить время выполнения SQL запроса, как это делает PHPMyAdmin, только в самом PHP?
Пока что мой класс только немного облегчает написание кода запросов, но до генерации SQL , там- как до той же Японии коленками назад)))

    public function setquery($q) 
    {
        $this->result= mysql_query($q);
        if (!$this->result)
        {
            $this->result= mysql_error();
            exit();
        }
        return $this->result;
    }   

По моему это все же меньше писанины и ветвлений в коде, чем каждый раз проверять возвращаемое значение в самой программе...
Получится или нет- это вопрос второго плана. Не ошибается тот- кто ни чего не делает)))

  Ответить  
 
 автор: cheops   (15.05.2013 в 07:20)   письмо автору
 
   для: Nickiomen   (14.05.2013 в 22:57)
 

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

  Ответить  
 
 автор: Nickiomen   (15.05.2013 в 10:01)   письмо автору
 
   для: cheops   (15.05.2013 в 07:20)
 

Так вот с временем выполнения как раз и проблема. Если я правильно понял, то это "SHOW PROFILE", вот только с синтаксисом не совсем понятно.

  Ответить  
 
 автор: psychomc   (15.05.2013 в 11:51)   письмо автору
 
   для: Nickiomen   (15.05.2013 в 10:01)
 

можно вот так

<?php
$query 
"SELECT * FROM ....";
$time_before microtime(true);
$result mysql_query($query);
$time_after microtime(true);
echo 
number_format($time_after $time_before4);


если не ошибаюсь, phpmyadmin считает именно так

  Ответить  
 
 автор: Nickiomen   (15.05.2013 в 12:08)   письмо автору
 
   для: psychomc   (15.05.2013 в 11:51)
 

Спасибо! Еще такой вопрос, а если писать в обычный файл, не быстрее ли будет, чем в базу?

  Ответить  
 
 автор: psychomc   (15.05.2013 в 17:42)   письмо автору
 
   для: Nickiomen   (15.05.2013 в 12:08)
 

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

  Ответить  
 
 автор: Nickiomen   (15.05.2013 в 18:00)   письмо автору
 
   для: psychomc   (15.05.2013 в 17:42)
 

Ну у меня получилось примерно следующее:
15:05:13.06:43:44<::>SELECT * FROM login<::>0.0010
15:05:13.06:45:07<::>SELECT * FROM login<::>0.0008
15:05:13.06:45:08<::>SELECT * FROM login<::>0.0014
Но есть одно но, PHPDesigner выдает предупреждение на функцию data(), советуют использовать"date.timezone setting or the date_default_timezone_set() function" есть смысл переписывать или он предлагает определить часовой пояс?
Пока поставил $time= @date();

  Ответить  
 
 автор: Nickiomen   (15.05.2013 в 21:11)   письмо автору
 
   для: Nickiomen   (15.05.2013 в 18:00)
 

Переписал вывод лога, теперь еще и ошибки записывает.
>15:05:2013.21:51:28<::>SELECT VERSION()<::>0.0006
>15:05:2013.21:52:22<::>SELEC VERSION()<::>You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELEC VERSION()' at line 1
>15:05:2013.21:53:16<::>SELECT VERSION()<::>0.0006

  Ответить  
 
 автор: Sfinks   (16.05.2013 в 19:32)   письмо автору
 
   для: Nickiomen   (15.05.2013 в 21:11)
 

Ошибки лучше писать отдельно.
В логе на пару мегабайт Вы их в жизни не найдете.
А в отдельном файле легко.

  Ответить  
 
 автор: Nickiomen   (17.05.2013 в 23:12)   письмо автору
 
   для: Sfinks   (16.05.2013 в 19:32)
 

У меня два варианта работы класса: с логированием sql- запросов, и без лога, т.е. в лог идут только запросы и ответы на них. При тесте на Денвере все нормально, но с двумя файлами лога... ХЗ))) Озадачил вопрос про 10... 1000... 100 000 подключений... По моему при 100 одновременных подключениях обязан рухнуть сервер с громкими матами, а потом предчувствуя очередной бардак отказаться включаться.
Подскажите по сессиям, а то у меня такой учебник(для истинных программеров), найди ошибку сам))). Переписывать(извращать) чужой код не хочу, и не стану, интересно самому написать. Может логи выводить по ID?
А про получится или нет я уже писал)))
Извиняюсь за связность текста, на Д.Р. у брата)))

  Ответить  
Rambler's Top100
вверх

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