|
|
|
| только плиз серьёзно и по пунктам, я просто делаю делаю скрипт и уже неделю целую настроения не падает, не хочу что бы по глупости настроение пропало :)
----
1 - как сделать что бы выводилось количество обращейни к базе, например я защёл на главную - внизу цифрами количество и так дале! надеюсь понятненько!
2 - я искал по поиску не нещёл, время генирации скрипта если мона дайте плиз!
3 - посомтрите эту тему http://softtime.ru/forum/read.php?id_forum=5&id_theme=23370&page=1 | |
|
|
|
|
|
|
|
для: Panker
(26.08.2006 в 13:10)
| | 1.считать каждое обращение к базе, потом суммировать и выводить циферку. проще простого. надо лишь немного подумать.
2. запоминаешь метку в начале скрипта, запоминаешь метку в конце, вычитаешь и получаешь результат. еще проще простого. | |
|
|
|
|
|
|
|
для: Panker
(26.08.2006 в 13:10)
| | 1 - Присоединяюсь к RV, тут только подсчёт в коде в ручную... специальных функций, облегчающих работу нет.
2 - можно поступить следующим образом
<?php
function gettime()
{
$part_time = explode(' ',microtime());
$real_time = $part_time[1].substr($part_time[0],1);
return $real_time;
}
$start_time = gettime();
// ...
$stop_time = gettime();
$time = bcsub($stop_time,$start_time,4);
printf('Время выполнения скрипта: '.$time);
?>
|
PS Такие скрипты следует искать в ответах на задачи - там их достаточно много. | |
|
|
|
|
|
|
|
для: Panker
(26.08.2006 в 13:10)
| | 1. Вот здесь может пригодиться ещё один уровень абстракции.
Т.е. работу с базой вынести в отдельную библиотеку оформленную как класс. И обращаться к базе не через
mysql_query() а например через метод $db->query();
А за подсчёт запросов будет отвечать специальное свойство класса
например:
<?
class dbClass{
function dbClass(){
$this->query_count = 0;
}
function query($sql){
$this->query = mysql_query($this->sql);
$this->query_count++; // Счётчик запросов. прибавляем запрос
}
// И например метод вытаскивающий строку
function selectRow($sql){
$this->query($sql);
return mysql_fetch_assoc($this->query);
}
function query_count(){
return $this->query_count;
}
}
?>
|
пример использования:
<?
$db = new dbClass();
$sql = 'select * from table where id=1';
$row = $db->selectRow($sql);
// ....
$sql = 'insert into table ... ';
$db->query($sql);
// ....
// Подвал
echo "Запросов на странице: ".$db->query_count();
?>
|
| |
|
|
|
|
|
|
|
для: Axxil
(26.08.2006 в 17:30)
| | Согласен, кстати, очень типичный удачный способ использования ООП в PHP. Здесь действительно использование ООП полезно и оправдано. | |
|
|
|
|
|
|
|
для: cheops
(26.08.2006 в 22:58)
| | в самом классе была ошибка там типа НЕ используемый аргумент на 13 строку, там было
// И например метод вытаскивающий строку
function selectRow($sql){
$this->query($sql);
return mysql_fetch_assoc($this->query); - 13 строка
я её убрал ошибки не было, обращений столько же, это как то повлияет на работу, и что она лишняя ? :D
и немного не понятно, этот класс считает сколько ввсего было обращейни при открытии страницы, или считает обращейний к определёной таблице! | |
|
|
|
|
|
|
|
для: Panker
(27.08.2006 в 13:18)
| | Это заготовка класса, написанная на коленке за 2 минуты.
Разберём её по полочкам
<?
class dbClass{
function dbClass(){
// Это у нас конструктор класса. Функция вызывается при инициализации класса.
// Т.е. во время выполнения инструкции $db = new $dbClass();
$this->query_count = 0; // Это счётчик запросов, начальные условия 0
$this->q = ''; // Это свойство, где будет храниться результат запроса
}
function query($sql){
// Универсальная функция осуществляющая запросы к БД.
// Т.е. она вызывается каждый раз, когда идёт обращение к базе
$this->q = mysql_query($this->sql);
// Внутреней переменной query мы присваиваем результат запроса,
//теперь он будет виден из любой функции класса.
$this->query_count++; // При каждом новом запросе прибавляем один к счётчику
}
// И например метод вытаскивающий строку
function selectRow($sql){
// Делаем запрос к базе.
$this->query($sql);
// Возвращаем первую строку результата
return mysql_fetch_assoc($this->q);
}
function query_count(){
// данный метод возвращает текущее значение счётчика запросов
return $this->query_count;
}
}
?>
|
Класс считает все обращения к базе, но с помощью регулярных выражений можно выделить обращения к определённым таблицам | |
|
|
|
|
|
|
|
для: Axxil
(27.08.2006 в 16:51)
| | хоть убей ошибка на
// Возвращаем первую строку результата
return mysql_fetch_assoc($this->q);
с чего бы это ? :( | |
|
|
|
|
|
|
|
для: Panker
(27.08.2006 в 16:56)
| | Можно поглядеть как класс вызывется и текст ошибки? | |
|
|
|
|
|
|
|
для: Axxil
(27.08.2006 в 16:59)
| | в данный момент пробывал вот так
<?
class dbClass{
function dbClass(){
// Это у нас конструктор класса. Функция вызывается при инициализации класса.
// Т.е. во время выполнения инструкции $db = new $dbClass();
$this->query_count = 0; // Это счётчик запросов, начальные условия 0
$this->q = ''; // Это свойство, где будет храниться результат запроса
}
function query($sql){
// Универсальная функция осуществляющая запросы к БД.
// Т.е. она вызывается каждый раз, когда идёт обращение к базе
$this->q = mysql_query($this->sql);
// Внутреней переменной query мы присваиваем результат запроса,
//теперь он будет виден из любой функции класса.
$this->query_count++; // При каждом новом запросе прибавляем один к счётчику
}
// И например метод вытаскивающий строку
function selectRow($sql){
// Делаем запрос к базе.
$this->query($sql);
// Возвращаем первую строку результата
return mysql_fetch_assoc($this->q);
}
function query_count(){
// данный метод возвращает текущее значение счётчика запросов
return $this->query_count;
}
}
?>
<?
$db = new dbClass();
$sql = 'select * from table where id=1';
$row = $db->selectRow($sql);
// ....
$sql = 'insert into table ... ';
$db->query($sql);
// ....
// Подвал
echo "Запросов на странице: ".$db->query_count();
?>
|
в прошлый раз делал инклуд класса и писал
<?
$db = new dbClass();
$sql = 'select * from table where id=1';
$row = $db->selectRow($sql);
// ....
$sql = 'insert into table ... ';
$db->query($sql);
// ....
// Подвал
echo "Запросов на странице: ".$db->query_count();
?>
|
оибка вот Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in y:\home\cms-ka\www\index.php on line 207 | |
|
|
|
|
|
|
|
для: Panker
(27.08.2006 в 16:59)
| | Весело :)
А тестируется скрипт на реальной базе? Вообще база есть? И есть ли в базе таблица table и есть ли в этой таблице поле id
все запросы показаны в тестовом виде. И использовать надо на реальной базе. | |
|
|
|
|
|
|
|
для: Axxil
(27.08.2006 в 17:43)
| | там есть вот эта таблица :)
$sql = 'select * from pages where pages_id=1';
но всё равно таже ошибка и даже так
$sql = 'select * from pages';
таже )) | |
|
|
|
|
|
|
|
для: Panker
(27.08.2006 в 18:30)
| | Такс...
А база как подключается. Можно полностью страницу привести...
Т.е. где происходит вызов mysql_connect и mysql_select_db? | |
|
|
|
|
|
|
|
для: Axxil
(27.08.2006 в 19:04)
| |
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
require_once("include/mysql.php");
$pages = $_GET['id'];
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Вывод общего текста на страницу //
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
function pef1($pages)
{
if(!preg_match("/[0-9]/i", $pages))
{ echo "ERROR ID"; }
else
{
$pagesth = mysql_query("select * from pages where pages_id = $pages");
if($pagesth)
{
while($pagesuthor = mysql_fetch_array($pagesth))
{
require_once("class/bb.php"); //Подключаем файл замены ББ кодов, а так же проверки на запрещённые теги и символы.
echo "".$pagesuthor['pages_text']."";
}
}
else
{
echo "<p><b>Error: ".mysql_error()."</b><p>";
exit();
}
}
return;
}
class dbClass{
function dbClass(){
// Это у нас конструктор класса. Функция вызывается при инициализации класса.
// Т.е. во время выполнения инструкции $db = new $dbClass();
$this->query_count = 0; // Это счётчик запросов, начальные условия 0
$this->q = ''; // Это свойство, где будет храниться результат запроса
}
function query($sql){
// Универсальная функция осуществляющая запросы к БД.
// Т.е. она вызывается каждый раз, когда идёт обращение к базе
$this->q = mysql_query($this->sql);
// Внутреней переменной query мы присваиваем результат запроса,
//теперь он будет виден из любой функции класса.
$this->query_count++; // При каждом новом запросе прибавляем один к счётчику
}
// И например метод вытаскивающий строку
function selectRow($sql){
// Делаем запрос к базе.
$this->query($sql);
// Возвращаем первую строку результата
return mysql_fetch_assoc($this->q);
}
function query_count(){
// данный метод возвращает текущее значение счётчика запросов
return $this->query_count;
}
}
$db = new dbClass();
$sql = 'select * from pages where pages_id=1';
$row = $db->selectRow($sql);
// ....
$sql = 'insert into table ... ';
$db->query($sql);
// ....
// Подвал
echo "Запросов на странице: ".$db->query_count();
require_once("templars/origenal/index.php"); //Подключаем шаблон!
?>
|
база не пустая, всё выводится всё работает н оошибка есь, и всегда число показывает 2, 2 обращения | |
|
|
|
|
|
|
|
для: Panker
(27.08.2006 в 19:49)
| | Блин, старею похоже...
Эту строчку надо изменить:
$this->q = mysql_query($this->sql);
|
на
$this->q = mysql_query($sql);
|
А через класс у вас проходят всего два запроса, поэтому два и показывает.
Да и
$sql = 'insert into table ... ';
|
Абсолютно бессмысленный запрос. Зачем вы его оставили? | |
|
|
|
|
|
|
|
для: Axxil
(27.08.2006 в 21:07)
| |
$sql = 'insert into table ... ';
|
а я и думал что там должно быть :)???''
и пару вопрсовов!
можно ли указывать базу так
$sql = 'select * from pages';
|
почему если я даже указываю базу не pages которая тут задействовается а доустим guest которая на той старнице даже не задействуется всё равно показывается ОБРАЩЕЙНИЙ 2!!? | |
|
|
|
|
|
|
|
для: Panker
(27.08.2006 в 21:51)
| | Раздели понятия база и таблица в базе.
pаges и quest это таблицы в базе
Вы когда выбираете базу в mysql_select_db то устанавливаете её текущей (если линки не используете).
И данный класс считает обращения к таблицам этой базы. | |
|
|
|
|
|
|
|
для: Axxil
(27.08.2006 в 22:11)
| | да запутался!
вот у меян есть БАЗА cms в ней море тамблиц в которых много сталбцов!
что считывает скрипт? обращейния ко всей баезе? к тамблице? или к 1 столбцу? | |
|
|
|
|
|
|
|
для: Panker
(27.08.2006 в 22:15)
| | Класс считает кол-во обращений к базе cms на данной странице | |
|
|
|
|
|
|
|
для: Axxil
(27.08.2006 в 23:15)
| | простите за непонятки, но зачем тогда вот эта ? $sql = 'select * from pages'; указывать таблицу и так далее? | |
|
|
|
|
|
|
|
для: Panker
(27.08.2006 в 23:44)
| | Потому что
Это запрос к базе данных на языке SQL
База понимает только такой язык, с этим уж ничего не поделаешь :)
И к пхп этот язык не имеет никакого отношения. PHP позволяет лишь обработать и вывести результат запроса. | |
|
|
|
|
|
|
|
для: Axxil
(28.08.2006 в 00:18)
| |
Потому что
select * from pages
Это запрос к базе данных на языке SQL
База понимает только такой язык, с этим уж ничего не поделаешь :)
И к пхп этот язык не имеет никакого отношения. PHP позволяет лишь обработать и вывести результат запроса.
|
простите, если ОЧЕНЬ СИЛЬНО ступлю... но в базе что то создовать надо что бы нормально работало? ил нет ? ато я что то оч сильрно сомневаюсь :) | |
|
|
|
|
|
|
|
для: Panker
(28.08.2006 в 10:21)
| | Если у вас уже есть база, то ничег специально создавать не надо.
В качестве примера приведу подключение класса к вашей функции pefl
Надеюсь понятнее станет.
<?
class dbClass{
function dbClass(){
// Это у нас конструктор класса. Функция вызывается при инициализации класса.
// Т.е. во время выполнения инструкции $db = new $dbClass();
$this->query_count = 0; // Это счётчик запросов, начальные условия 0
$this->q = ''; // Это свойство, где будет храниться результат запроса
}
function query($sql){
// Универсальная функция осуществляющая запросы к БД.
// Т.е. она вызывается каждый раз, когда идёт обращение к базе
$this->q = mysql_query($this->sql);
// Внутреней переменной query мы присваиваем результат запроса,
//теперь он будет виден из любой функции класса.
$this->query_count++; // При каждом новом запросе прибавляем один к счётчику
}
// И например метод вытаскивающий строку
function selectRow($sql){
// Делаем запрос к базе.
$this->query($sql);
// Возвращаем первую строку результата
return mysql_fetch_assoc($this->q);
}
// Метод делающий полную выборку
function select(){
$ret = array();
$this->query($sql);
while($r = mysql_fetch_assoc($this->q))
array_push($ret,$r);
return $ret;
}
function query_count(){
// данный метод возвращает текущее значение счётчика запросов
return $this->query_count;
}
}
function pef1($pages,$db)
{
if(!preg_match("/[0-9]/i", $pages))
{ echo "ERROR ID"; }
else
{
$sql = "select * from pages where pages_id = $pages";
$data = $db->select($sql);
foreach($data as $pagesuthor)
{
require_once("class/bb.php"); //Подключаем файл замены ББ кодов, а так же проверки на запрещённые теги и символы.
echo "".$pagesuthor['pages_text']."";
}
}
return;
}
$db = new dbClass();
pefl($page,$db);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(26.08.2006 в 22:58)
| | Согласен, кстати, очень типичный удачный способ использования ООП в PHP. Здесь действительно использование ООП полезно и оправдано.
Кстати ещё одно достоинство ООП в данном случае - это то что можно легко и быстро перенести всю систему с MySQL на скажем MSSQL. Для этого всего лишь нужно переписать класс базы данных.... | |
|
|
|