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
Форумы портала PHP.SU :: Версия для печати :: Класс для подключения к БД (MySQL)
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Класс для подключения к БД (MySQL)

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

1. FactoREAL - 18 Марта, 2016 - 12:40:05 - перейти к сообщению
Добрый день. помогите пожалуйста разобраться в ситуации. Имеется приложение с 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'. Так же, если выполнить запрос к БД в конструкторе модели, то он выполнится успешно. Выходит, что линк где то теряется. Помогите разобраться, что я делаю не так...
2. OrmaJever - 18 Марта, 2016 - 13:20:58 - перейти к сообщению
FactoREAL пишет:
Написал класс для подключения к БД MySQL

В mvc вы полезли, а прочитать что класс для подключения к бд уже есть вы не смогли?
3. FactoREAL - 18 Марта, 2016 - 14:07:48 - перейти к сообщению
видимо да. а точнее можете сказать что за класс ? где он есть ?
но все равно хотелось бы разобраться что не так в моем коде. в данном случае мне важнее понять как это сделать, чем просто взять готовый класс, написанный кем то. Мне нужно-то всего 10 строк кода и ради этого не хочу брать чужой класс с кучей ненужных мне методов.

 

Powered by ExBB FM 1.0 RC1