Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Класс для подключения к БД (MySQL)

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: теряется линк подключения при вызове метода класса
FactoREAL
Отправлено: 18 Марта, 2016 - 12:40:05
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




Добрый день. помогите пожалуйста разобраться в ситуации. Имеется приложение с MVC архитектурой. Написал класс для подключения к БД MySQL
PHP:
скопировать код в буфер обмена
  1. class dbMysql {
  2.         private $connection;
  3.  
  4.         public function connect($host, $user, $pass, $db) {
  5.                 $this->connection = mysql_connect($host, $user, $pass);
  6.                 if ($this->connection) {
  7.                         mysql_select_db($db, $this->connection);
  8.                         mysql_query("SET NAMES utf8", $this->connection);
  9.                 }
  10.                 return $this->connection;
  11.         }
  12.  
  13.         public function disconnect() {
  14.                 if ($this->connection) {
  15.                         mysql_close($this->connection);
  16.                 }
  17.         }
  18. }

Данный класс только создает и разрывает подключение к БД и возвращает линк на подключение, который будет в дальнейшем использовать вне этого класса для выполнения запросов к БД. Вот так я это делаю в модели (код я упростил):
PHP:
скопировать код в буфер обмена
  1. class Model_wealth extends Model {
  2.         protected $db;
  3.         protected $dbLink;
  4.         public function __construct() {
  5.                 $this->db = new dbMysql();
  6.                 $this->dbLink = $this->db->connect('localhost', 'user', 'password', 'db');
  7.  
  8.         }
  9.  
  10.         function __destruct() {
  11.                 $this->db->disconnect();
  12.         }
  13.  
  14.         public function get_data() {
  15.                 $res = array();
  16.                 $query = mysql_query("SELECT rajons.id, rajons.name FROM rajons
  17.                                                         right join (select rajon_id from building group by rajon_id) as tmp
  18.                                                         ON rajons.id=tmp.rajon_id", $this->dbLink);
  19.                 $cnt = mysql_num_rows($query);
  20.                 for ($i=0; $i<$cnt; $i++) {
  21.                         $id = mysql_result($query, $i, 0);
  22.                         $name = mysql_result($query, $i, 1);
  23.                         $res[$id] = $name;
  24.                 }
  25.                 return $res;
  26.         }
  27. }

При выполнении метода get_data() не выполняется sql запрос. выводит ошибку Warning: mysql_query(): 11 is not a valid MySQL-Link resource . Вывод Var_dump($this->dbLink) показывает resource id='11' type='Unknown', хотя если сдампить это значение в конструкторе модели, то оно нормальное и равняется resource id='11' type='mysql link'. Так же, если выполнить запрос к БД в конструкторе модели, то он выполнится успешно. Выходит, что линк где то теряется. Помогите разобраться, что я делаю не так...
 
 Top
OrmaJever Модератор
Отправлено: 18 Марта, 2016 - 13:20:58
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




FactoREAL пишет:
Написал класс для подключения к БД MySQL

В mvc вы полезли, а прочитать что класс для подключения к бд уже есть вы не смогли?


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
FactoREAL
Отправлено: 18 Марта, 2016 - 14:07:48
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Март 2016  


Помог: 0 раз(а)




видимо да. а точнее можете сказать что за класс ? где он есть ?
но все равно хотелось бы разобраться что не так в моем коде. в данном случае мне важнее понять как это сделать, чем просто взять готовый класс, написанный кем то. Мне нужно-то всего 10 строк кода и ради этого не хочу брать чужой класс с кучей ненужных мне методов.

(Отредактировано автором: 18 Марта, 2016 - 14:42:56)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB