Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Соединение с БД в классе
savelikan  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 370
Пользователь №: 18633
На форуме: 7 лет, 3 месяца, 26 дней
Карма:




Привет всем) Решил к Вам обратится за помощью)
Вот пишу клас для работы с БД.
class mysql {
private $connection;
private $queries = 0;
public $query_time = 0;
public $query_count = 0;
public $query_text = '';

public function __construct () {
GLOBAL $CONFIG;
$connection = mysql_connect($CONFIG['sql_host'], $CONFIG['sql_user'], $CONFIG['sql_pass']) or die ('Не можу приєднатися до серверу MySQL');
mysql_select_db($CONFIG['sql_base'], $connection);
$this->connection = $connection;
mysql_query ("SET NAMES utf8");
}

public function query ($query) {
get_execution_time();
if ($result = mysql_query($query, $this->connection)) {
$this->queries += 1;
} else {
die (mysql_error().' '. __LINE__ .' '. __FILE__);
}
$query_time = get_execution_time();
$this->query_time += $query_time;
$this->query_count++;
$this->query_text .= '<DIV STYLE="border-bottom:1px dashed #B5B5B5;">'.$query.'</DIV>';
return $result;
}
}

естественно, запускаю в шапке
$mysql = new mysql();

Но вот в целях оптимизации хочу сделать так, чтоб он соеденялся в БД только тогда, когда на странице есть запросы к БД.
Вот, что тестировал:
	public function connectbd () {
GLOBAL $CONFIG;
$connection = mysql_connect($CONFIG['sql_host'], $CONFIG['sql_user'], $CONFIG['sql_pass']) or die ('Не можу приєднатися до серверу MySQL');
mysql_select_db($CONFIG['sql_base'], $connection);
$this->connection = $connection;
mysql_query ("SET NAMES utf8");
}

public function query ($query) {
get_execution_time();
IF($connection==FALSE){
connectbd ();
}
if ($result = mysql_query($query, $this->connection)) {
$this->queries += 1;
} else {
die (mysql_error().' '. __LINE__ .' '. __FILE__);
}
$query_time = get_execution_time();
$this->query_time += $query_time;
$this->query_count++;
$this->query_text .= '<DIV STYLE="border-bottom:1px dashed #B5B5B5;">'.$query.'</DIV>';
return $result;
}

Оно просто не может найти функцию connectbd.....
Помогите, пожалуйста)


--------------------
Одесса - мой город!)))
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14969
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 28 дней
Карма: 443




Вот это
		IF($connection==FALSE){
connectbd ();
}


замени на это
		if( $this->$connection==false){
$this->connectbd ();
}


В других местах тоже есть ошибка - ты не написал $this перед именами методов и переменных класса.

И еще. Лучше замени имя функции connectbd() на connectdb(). Это не ошибка, но уж если ты пишешь по-английски названия функций, то и всё из английского используй. Это у нас "база данных", а у них "data base" - другой порядок слов, который надо учитывать в сокращениях.

PS. И лучше по возможности избегать использования глобальных переменных.

Это сообщение отредактировал sergeiss - 3.01.2016 - 13:05


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
savelikan  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 370
Пользователь №: 18633
На форуме: 7 лет, 3 месяца, 26 дней
Карма:




Fatal error: Cannot access empty property


--------------------
Одесса - мой город!)))
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14969
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 28 дней
Карма: 443




Ну так по экспериментируй, на основе выданной ошибки :)
	private $connection=false;


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
savelikan  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 370
Пользователь №: 18633
На форуме: 7 лет, 3 месяца, 26 дней
Карма:




Вот вроде так заработало)
class mysql {
private $connection=false;
private $queries = 0;
public $query_time = 0;
public $query_count = 0;
public $query_text = '';


public function connectbd () {
GLOBAL $CONFIG;
$connection = mysql_connect($CONFIG['sql_host'], $CONFIG['sql_user'], $CONFIG['sql_pass']) or die ('Не можу приєднатися до серверу MySQL');
mysql_select_db($CONFIG['sql_base'], $connection);
$this->connection = $connection;
mysql_query ("SET NAMES utf8");
}

public function query ($query) {
get_execution_time();
if( $this->connection==false){
$this->connectbd ();
}
if ($result = mysql_query($query, $this->connection)) {
$this->queries += 1;
} else {
die (mysql_error().' '. __LINE__ .' '. __FILE__);
}
$query_time = get_execution_time();
$this->query_time += $query_time;
$this->query_count++;
$this->query_text .= '<DIV STYLE="border-bottom:1px dashed #B5B5B5;">'.$query.'</DIV>';
return $result;
}
}

ото точно только один раз будет подключатся к БД? Или при каждом запросе $mysql->query()?


--------------------
Одесса - мой город!)))
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14969
Пользователь №: 4190
На форуме: 8 лет, 9 месяцев, 28 дней
Карма: 443




Цитата (savelikan @ 3.01.2016 - 13:27)
ото точно только один раз будет подключатся к БД? Или при каждом запросе $mysql->query()?

Проверь :) Поставь временный вывод какой-нибудь контрольной инфы. Судя по твоему коду, только один раз должно подключиться.

И еще. В чем сакраментальный смысл такого подключения?
Цитата (savelikan @ 3.01.2016 - 13:27)
$connection = mysql_connect($CONFIG['sql_host'], $CONFIG['sql_user'], $CONFIG['sql_pass']) or die ('Не можу приєднатися до серверу MySQL');
mysql_select_db($CONFIG['sql_base'], $connection);
$this->connection = $connection;


Почему бы не сделать проще

$this->connection = mysql_connect($CONFIG['sql_host'], $CONFIG['sql_user'], $CONFIG['sql_pass']) or die ('Не можу приєднатися до серверу MySQL');
mysql_select_db($CONFIG['sql_base'], $this->connection);


--------------------
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
PMICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
casper - gg  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Пользователь
Сообщений: 216
Пользователь №: 42190
На форуме: 1 год, 1 день
Карма: 10




к sergeiss нужно прислушиваться. Все таки db куда вернее чем bd. Коннектится будет раз в рамках одного объекта. Про это нужно не забывать. И желательно метод public function connectbd () сделать приватным. Ну и mysql уже пора оставить в покое, а использовать например mysqli.
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса