|
|
|
| идея: создать класс, создающий, изменяющий, удаляющий, редактирующий... только что, не берущий их замуж...))) по одному только открытию сессии?
Не могу придумать структуру классов...
кажется опять с веткой промахнулси... | |
|
|
|
|
|
|
|
для: Nickiomen
(12.05.2013 в 05:16)
| | Таких готовых систем очень много, называют их ORM. Все они, в том числе, которую вы разработаете с нуля будут менее гибкие и менее читабельными, чем чистый SQL - так как объектно-ориентированное программирование и SQL - это два разных решения в декларативном стиле - они очень, очень плохо сочетаются. Хотя бы по тому, что один оперирует объектами и сигналами, а другой - списками и операциями над ними. Т.е. математические модели, которые лежат в их основе разные. Поэтому придется много думать и много кодировать. Однако, лучше предварительно изучить готовые системы, тот же Doctrine и убедиться, что сложность никуда не девается. | |
|
|
|
|
|
|
|
для: cheops
(12.05.2013 в 09:31)
| | Ага, понятно. Спасибо! Только это скорее идея для саморазвития в PHP, чем рабочая версия библиотеки. | |
|
|
|
|
|
|
|
для: Nickiomen
(12.05.2013 в 15:08)
| | Идея очень поучительная попробовать обязательно стоит, хотя бы чтобы на практике убедиться насколько это лютая задача и как многократные усилия и тонны кода не только не способствуют гибкости и скорости, а наоборот уводят почву из под ног. Ведь на ORM выросли целые поколения разработчиков, которые зачастую SQL-запросов почти не составляли... а оптимизация скорости требует понимания SQL и понимание что стоит за тем или иным классов (а оптимизация зачастую крайне проблематична).
Если будете делать, то лучше используйте подход, принятый в Ruby on Rails - они в принципе складируют в лог все SQL-запросы вместе со временем выполнения. В результате сразу видно узкое место и есть возможность подумать, как его исправить. Вот такой штуки в PHP явно не хватает. | |
|
|
|
|
|
|
|
для: cheops
(12.05.2013 в 17:47)
| | насколько это лютая задача и как многократные усилия и тонны кода не только не способствуют гибкости и скорости, а наоборот уводят почву из под ног.
И чего я сразу не поверил?))) То- что, красиво и читабельно- просто убивает сервак, а нечитабельный текст... а на кой он тогда нужен? С Руби не работал, не просветите в общих чертах? | |
|
|
|
|
|
|
|
для: 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-запросы всегда перед глазами. | |
|
|
|
|
|
|
|
для: 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;
}
|
По моему это все же меньше писанины и ветвлений в коде, чем каждый раз проверять возвращаемое значение в самой программе...
Получится или нет- это вопрос второго плана. Не ошибается тот- кто ни чего не делает))) | |
|
|
|
|
|
|
|
для: Nickiomen
(14.05.2013 в 22:57)
| | А вы просто попробуйте записывать все SQL-запросы и время их выполнения в таблицу базы данных и выводить на отдельной странице в системе администрирования. Причем все запросы, как на чистом SQL, так и сгенерированные - уже будет очень хорошее дело. | |
|
|
|
|
|
|
|
для: cheops
(15.05.2013 в 07:20)
| | Так вот с временем выполнения как раз и проблема. Если я правильно понял, то это "SHOW PROFILE", вот только с синтаксисом не совсем понятно. | |
|
|
|
|
|
|
|
для: 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_before, 4);
|
если не ошибаюсь, phpmyadmin считает именно так | |
|
|
|
|
|
|
|
для: psychomc
(15.05.2013 в 11:51)
| | Спасибо! Еще такой вопрос, а если писать в обычный файл, не быстрее ли будет, чем в базу? | |
|
|
|
|
|
|
|
для: Nickiomen
(15.05.2013 в 12:08)
| | если записывать просто запросы и время выполнения построчно в виде логов, то файл, по крайней мере, будет удобнее. но база предоставляет больше возможностей для выборки. смотрите что для вас предпочтительнее | |
|
|
|
|
|
|
|
для: 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 в 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 | |
|
|
|
|
|
|
|
для: Nickiomen
(15.05.2013 в 21:11)
| | Ошибки лучше писать отдельно.
В логе на пару мегабайт Вы их в жизни не найдете.
А в отдельном файле легко. | |
|
|
|
|
|
|
|
для: Sfinks
(16.05.2013 в 19:32)
| | У меня два варианта работы класса: с логированием sql- запросов, и без лога, т.е. в лог идут только запросы и ответы на них. При тесте на Денвере все нормально, но с двумя файлами лога... ХЗ))) Озадачил вопрос про 10... 1000... 100 000 подключений... По моему при 100 одновременных подключениях обязан рухнуть сервер с громкими матами, а потом предчувствуя очередной бардак отказаться включаться.
Подскажите по сессиям, а то у меня такой учебник(для истинных программеров), найди ошибку сам))). Переписывать(извращать) чужой код не хочу, и не стану, интересно самому написать. Может логи выводить по ID?
А про получится или нет я уже писал)))
Извиняюсь за связность текста, на Д.Р. у брата))) | |
|
|
|