Форумы портала PHP.SU » PHP » Программирование на PHP » Помогите с mysql_error()

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

1. Dimentor - 20 Января, 2007 - 15:41:57 - перейти к сообщению
Здравствуйте.

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

Есть скрипт 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
2. f0rm4t - 20 Января, 2007 - 16:14:22 - перейти к сообщению
Вероятно что соединение возвращает неверный идентификатор (соединение не прошло) в переменную 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.  


(Добавление)
Так же можешь просто скрыть вывод ошибок, добавив собачку =)
3. Dimentor - 20 Января, 2007 - 17:39:57 - перейти к сообщению
Поправил немного пример.

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

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

4. f0rm4t - 20 Января, 2007 - 20:53:10 - перейти к сообщению
Блин, ведь тебе сказал причину!
Цитата:
resource mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]] )


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


Если соединение не прошло, указатель в переменной неверен. Функции mysql_error() и mysql_errno() в качестве аргументов принимают указатель на соединение.
Так как соединение не прошло - указатель неверен, вот mysql_err* и ругается на него.
5. Dimentor - 20 Января, 2007 - 22:02:11 - перейти к сообщению
А нафиг она вообще может принимать аргумент.
string mysql_error ( [resource link_identifier] )

Если он не верен она ругается, а если он верен, то функция mysql_err* вообще по идее не нужна, она вернет пустую строку.
6. f0rm4t - 20 Января, 2007 - 22:55:06 - перейти к сообщению
Если у тебя используется несколько соединений с базой (возможно несколько серверов), то иначе никак. Но раз нет правильного указателя - не надо его использовать.
Как сказал выше, можно просто скрыть вывод ошибок...

 

Powered by ExBB FM 1.0 RC1