PHP.SU

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


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

> Без описания
Dimentor
Отправлено: 20 Января, 2007 - 15:41:57
Post Id


Новичок


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


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




Здравствуйте.

Помогите пожалуйста разобратся.

Есть скрипт test.php
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <?PHP
  4.         // MySql
  5.         define ('DB_HOST', 'localhost');
  6.         define ('DB_USER', 'root');
  7.         define ('DB_PASS', 'не правильный пароль');
  8.         define ('DB_NAME', 'test');
  9.        
  10.         class MySql
  11.         {
  12.                 var $db_cid;
  13.                 var $error;
  14.                
  15.                 function db_connect()
  16.                 {
  17.                         $this->db_cid = @mysql_connect (DB_HOST, DB_USER, DB_PASS);
  18.                         $this->error = mysql_error($this->db_cid);
  19.                         if ($this->error)
  20.                         {
  21.                                 echo $this->error.' '.mysql_errno($this->db_cid);
  22.                         }else{
  23.                                 echo 'ok';
  24.                         }
  25.                        
  26.                 }
  27.         }
  28.        
  29.         $obj = new MySql;
  30.         $obj->db_connect();
  31. ?>
  32.  


Если в функции mysql_error() и mysql_errno() передать идентификатор соеденения $this->db_cid то появляется ошибка
Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in z:hometestwwwtest.php on line 16
Warning: mysql_errno(): supplied argument is not a valid MySQL-Link resource in z:hometestwwwtest.php on line 16

Без него все работает нормально.
Но в документации по пхп сказано что все правильно. Что я делаю не правильно?

Тестирую на денвере php 5 mysql 4
 
 Top
f0rm4t
Отправлено: 20 Января, 2007 - 16:14:22
Post Id



Посетитель


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


Помог: -1 раз(а)




Вероятно что соединение возвращает неверный идентификатор (соединение не прошло) в переменную db_cid, по этому и возникает конфликт типов.

Попробуй примерно так:
PHP:
скопировать код в буфер обмена
  1.  
  2. ...
  3. $this->db_cid = @mysql_connect (DB_HOST, DB_USER, DB_PASS) or
  4. $this->error = 'Error: ' . mysql_error() . ' | ' . mysql_errno();
  5. ...
  6.  


(Добавление)
Так же можешь просто скрыть вывод ошибок, добавив собачку =)
 
 Top
Dimentor
Отправлено: 20 Января, 2007 - 17:39:57
Post Id


Новичок


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


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




Поправил немного пример.

Так если нет соеденения с БД mysq_error() должна обработать $db_cid. И выдать текст ошибки.
Что то у меня не получается, без ID mysq_error() работает конечно как надо. Охота понять почему не принимает идентификатор.

ЗЫ: PHP начал учить не давно, так что с моей стороны могут возникать глупые вопросы Улыбка

 
 Top
f0rm4t
Отправлено: 20 Января, 2007 - 20:53:10
Post Id



Посетитель


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


Помог: -1 раз(а)




Блин, ведь тебе сказал причину!
Цитата:
resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]] )


Возвращает указатель на соединение с MySQL в случае успешного выполнения, или FALSE при неудаче.


Если соединение не прошло, указатель в переменной неверен. Функции mysql_error() и mysql_errno() в качестве аргументов принимают указатель на соединение.
Так как соединение не прошло - указатель неверен, вот mysql_err* и ругается на него.
 
 Top
Dimentor
Отправлено: 20 Января, 2007 - 22:02:11
Post Id


Новичок


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


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




А нафиг она вообще может принимать аргумент.
string mysql_error ( [resource link_identifier] )

Если он не верен она ругается, а если он верен, то функция mysql_err* вообще по идее не нужна, она вернет пустую строку.
 
 Top
f0rm4t
Отправлено: 20 Января, 2007 - 22:55:06
Post Id



Посетитель


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


Помог: -1 раз(а)




Если у тебя используется несколько соединений с базой (возможно несколько серверов), то иначе никак. Но раз нет правильного указателя - не надо его использовать.
Как сказал выше, можно просто скрыть вывод ошибок...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB