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]   

> Без описания
L_Nikita
Отправлено: 25 Августа, 2010 - 05:38:01
Post Id


Новичок


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


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




Написал такой класс:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. class DbConnection{
  4.  
  5.         private $mysqli_conn;
  6.  
  7.         private $last_error;
  8.  
  9.  
  10.         //---   Connection data -------------
  11.  
  12.         private $URL;
  13.  
  14.         private $UserName;
  15.  
  16.         private $Password;
  17.  
  18.         private $DbName;
  19.  
  20.  
  21.         //-----------------------------------
  22.  
  23.         public function __construct($URL, $UserName, $Password, $DbName){
  24.  
  25.             $this->$URL = $URL;
  26.             $this->$UserName = $UserName;
  27.             $this->$Password = $Password;
  28.             $this->$DbName = $DbName;
  29.  
  30.         }
  31.  
  32.  
  33.         public function connect(){
  34.             $this->$mysqli_conn = new mysqli($this->$URL, $this->$UserName, $this->$Password, $this->$DbName);// !!!
  35.             if(mysqli_connect_errno()) $this->$last_error = 'Connect failed: '.mysqli_connect_error();
  36.             $this->$mysqli_conn->query('set names utf8;');
  37.         }
  38.  
  39.  
  40.         public function getLastError(){
  41.             return $this->$last_error;
  42.         }
  43.  
  44.  
  45.         // Выборка одной записи из заданной таблицы
  46.         public function getRow($TableName, $ID_type, $ID){
  47.             $RowQueryResult = $this->$mysqli_conn->prepare('SELECT * FROM '.$TableName.' WHERE '.$ID_type.' = ?');
  48.             $RowQueryResult->bind_param("s", $ID);
  49.             $RowQueryResult->execute();
  50.             if($RowQueryResult->affected_rows) $ResultRow = $RowQueryResult->fetch_assoc();
  51.             else{
  52.                 $ResultRow = NULL;
  53.                 $this->$last_error = $mysqli_conn->lasr_error();
  54.             }
  55.             return $ResultRow;
  56.         }
  57.  
  58.  
  59.         function disconnect(){
  60.             if($RowQueryResult->affected_rows) $RowQueryResult->close();
  61.             $this->$mysqli_conn->close();
  62.         }
  63.     }
  64.  
  65.  


а тут созда1тся объект:

PHP:
скопировать код в буфер обмена
  1.  
  2.             require_once('DBConnectScript.php');
  3.             $conn = new DbConnection("URL", "username", "pass", "db");
  4.             $conn->connect();
  5.             $conn->disconnect();
  6.  


и в строке файла с определением класса
Цитата:
$this->$mysqli_conn = new mysqli($this->$URL, $this->$UserName, $this->$Password, $this->$DbName);// !!!

происходит ошибка:
Цитата:
Fatal error: Cannot access empty property

- не могу понять из-за чего.

(Отредактировано автором: 25 Августа, 2010 - 05:42:33)

 
 Top
Мелкий Супермодератор
Отправлено: 25 Августа, 2010 - 10:21:47
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




0) Надеюсь, реально классу нормальный адрес скармливаете, вместо "URL"?
1) И конструкция $class->$data разве корректна? В манах описано $class->data

(Отредактировано автором: 25 Августа, 2010 - 10:24:03)



-----
PostgreSQL DBA
 
 Top
Саныч
Отправлено: 25 Августа, 2010 - 11:20:47
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




вот ошибки $this->$URL и вот $this->$UserName, вобщем все такого типа, в данном случае ошибка... У вас получается, что значение присваивается свойству с именем $UserName. Без знака $ нужно, тогда все должно работать


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
L_Nikita
Отправлено: 25 Августа, 2010 - 12:07:32
Post Id


Новичок


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


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




Исправил, получилось вот что:

PHP:
скопировать код в буфер обмена
  1.  
  2. class DbConnection{
  3.  
  4.             private $mysqli_conn;
  5.             private $last_error;
  6.  
  7.             //---   Connection data -------------
  8.  
  9.             private $URL;
  10.             private $UserName;
  11.             private $Password;
  12.             private $DbName;
  13.  
  14.             //-----------------------------------
  15.  
  16.             public function __construct($URL, $UserName, $Password, $DbName){
  17.                 $this->$URL = $URL;
  18.                 $this->$UserName = $UserName;
  19.                 $this->$Password = $Password;
  20.                 $this->$DbName = $DbName;
  21.             }
  22.  
  23.             public function connect(){
  24.                 $this->mysqli_conn = new mysqli($this->URL, $this->UserName, $this->Password, $this->DbName);   // 1
  25.                 if(mysqli_connect_errno()) $this->last_error = 'Connect failed: '.mysqli_connect_error();
  26.                 $this->mysqli_conn->query('set names utf8;');   // 2
  27.             }
  28.  
  29.             public function getLastError(){
  30.                 return $this->last_error;
  31.             }
  32.  
  33.             // Выборка одной записи из заданной таблицы
  34.             public function getRow($TableName, $ID_type, $ID){
  35.                 $RowQueryResult = $this->mysqli_conn->prepare('SELECT * FROM '.$TableName.' WHERE '.$ID_type.' = ?');
  36.                 $RowQueryResult->bind_param("s", $ID);
  37.                 $RowQueryResult->execute();
  38.                 if($RowQueryResult->affected_rows) $ResultRow = $RowQueryResult->fetch_assoc();
  39.                 else{
  40.                     $ResultRow = NULL;
  41.                     $this->last_error = $mysqli_conn->last_error();
  42.                 }
  43.                 return $ResultRow;
  44.             }
  45.  
  46.             function disconnect(){
  47.                 if($RowQueryResult->affected_rows) $RowQueryResult->close();
  48.                 $this->mysqli_conn->close();   // 3
  49.             }
  50.         }
  51.  


но теперь другие ошибки:

1.
PHP:
скопировать код в буфер обмена
  1.  
  2. $this->mysqli_conn = new mysqli($this->URL, $this->UserName, $this->Password, $this->DbName);   // 1
  3.  


Цитата:

Warning: mysqli::mysqli() [mysqli.mysqli]: (28000/1045): Access denied for user 'ODBC'@'localhost' (using password: NO) in ...


2.
PHP:
скопировать код в буфер обмена
  1.  
  2. $this->mysqli_conn->query('set names utf8;');   // 2
  3.  


Цитата:

Warning: mysqli::query() [mysqli.query]: Couldn't fetch mysqli in ...


3.
PHP:
скопировать код в буфер обмена
  1.  
  2. $this->mysqli_conn->close();   // 3
  3.  


Цитата:

Warning: mysqli::close() [mysqli.close]: Couldn't fetch mysqli in ...



Я подозреваю, что соединения с бд не происходит, что по-моему странно Не понял и если mysqli соединять вне класса, то соединяется.

(Отредактировано автором: 25 Августа, 2010 - 12:20:59)

 
 Top
Саныч
Отправлено: 25 Августа, 2010 - 13:03:22
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


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




В __construct тоже поисправляйте, т.к. сейчас у вас получаеться, что в mysqli($this->URL, $this->UserName, $this->Password, $this->DbName); подставляеться пустота, т.е. фактически равно mysqli("","","","");


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
JustUserR
Отправлено: 26 Августа, 2010 - 09:55:01
Post Id



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


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


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




L_Nikita В языке PHP имеется достаточно специфическая система разграничения областей видимости переменных которая свяна с тем что в большинтсве версий PHP функции и классы не были объеклати первого рода хотя и допускали некоторое динамическое управлений - по этой причине при использовании в классе переменой без спецификатора $this будет подразумеваться создание локальной переменной внутри определеяющей функции для метода класса Дело в том что класс по сути представляет собой определенное именованное пространство имен - в частности при использовании модуля runkit возможно динамическое взаимодействием с ним и доступ к его элемента через оператор расширения области видимости


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
L_Nikita
Отправлено: 30 Августа, 2010 - 04:04:18
Post Id


Новичок


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


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




Всем спасибо.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB