класс для работы с базой

pitbuly

Новичок
класс для работы с базой

решил создать класс для работы с базой (mysql)
класс должен возвращать:
1)список баз данных
2)список таблиц в базе
3)имена полей таблицы
4)сами строки таблицы
С 1 и 2 работает ,проблемма с 3 и 4.
Вот сам класс:
PHP:
class get_base
  {
   public $DBname,$rows,$cols,$field_N,$res,$Query;
   private $showTables,$showDBname;
   public function __construct()
   {
   
     $this->Query = $Query;
     $this->DBname = $DBname;
     $this->rows = $rows;
     $this->cols = $cols;
     $this->field_N = $field_N;
     $this->res = $res;
     $this->showDBname = mysql_list_dbs();
     $this->showTables = mysql_query("SHOW TABLES;");
       mysql_select_db($this->DBname);
       $this->charset = mysql_client_encoding();
   }

   function base_R()  //список баз
   {
    $this->rows =  mysql_num_rows($this->showDBname);
     for($i=0;$i<$this->rows;$i++)
     {
        $this->res[]  = mysql_db_name($this->showDBname, $i);
     }
     return $this->res;
   }
   function table_R()  // cписок таблиц
   {
     

    $this->res = mysql_list_tables($this->DBname);
     while ($row = mysql_fetch_row($this->res)) {
        print "Таблица: $row[0]<br>";
    }
   }
   
   function field_N()    // поля таблицы и содержимое
   {
   $this->res = mysql_query($this->Query);

    while ($row = mysql_fetch_assoc($this->res)) {
        $field[] = $row;
    }
    return  $field;
  }
 }
  
 $DB  = new get_base();
  $DB->DBname = "base";
  $DB->Query = "select * from table;";
$field=$DB->field_N();

foreach ($field as $key=>$val)
    {
      print($val."<br>");
    }
выводит ошибку:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\www\Dbase\menu2.php on line 64
:(
 

bkonst

.. хочется странного?...
Тю. А проверять результат выполнения mysql_query кто будет?
 

pitbuly

Новичок
короче я вывел ошибки
echo mysql_errno() . ": " . mysql_error() . "<br>";
говорит что:
1046: No database selected
Но блин, я же выбрал базу в __construct.
 

bkonst

.. хочется странного?...
Но блин, я же выбрал базу в __construct.
А она выбралась? Вообще, в коде хватает вызовов функций PHP, которые могут закончиться неудачей, а их результат нигде не проверяется.
 

bkonst

.. хочется странного?...
neko
Я, собственно, в код не особо вчитывался, но мне кажется, что результат list_dbs у него используется по назначению - как ресурс. Там две разные переменные DBname и showDBname.

Единственно, DBname устанавливается после вызова __construct... :D
 

pitbuly

Новичок
всё сделал!!!
кому интересно можете использовать
класс выводит
1)список баз данных
2)список таблиц в базе
3)результат функции mysql_fetch_field()
вот сам класс
PHP:
class get_base
  {
   public $DBname,$rows,$cols,$field_N,$res,$Query;
   private $showTables,$showDBname;
   public function __construct($DB)
   {
   
     $this->meta = array();
     $this->row = $row;
     $this->Query = $Query;
     $this->DB = $DB;
     $this->rows = $rows;
     $this->cols = $cols;
     $this->field_N = $field_N;
     $this->res = $res;
     $this->showDBname = mysql_list_dbs();
     $this->showTables = mysql_query("SHOW TABLES;");
      $this->sel= mysql_select_db($this->DB);
       $this->charset = mysql_client_encoding();
   }

   function base_R()
   {
    $this->rows =  mysql_num_rows($this->showDBname);
     for($i=0;$i<$this->rows;$i++)
     {
        $this->res[]  = mysql_db_name($this->showDBname, $i);
     }
     return $this->res;
   }
   function table_R()
   {


    $this->res = mysql_list_tables($this->DBname);
     while ($row = mysql_fetch_row($this->res)) {
        print "база : $row[0]<br>";
    }
   }
   
   function field_N($skin)
   {

$this->res = mysql_query($this->Query);
   echo mysql_error() . "<br>";
   $i=0;
   while ($i < mysql_num_fields($this->res)) {
$meta = mysql_fetch_field($this->res);
  $res_cl[]=$meta->{$skin};
$i++;
 }
 return $res_cl;
}

}
а вот пример работы с классом
PHP:
$DB  = new get_base("base");

  $zap = mysql_escape_string("SELECT * FROM table;");
  $DB->Query = $zap;
  $name=$DB->field_N("name");
  $max_length=$DB->field_N("max_length");
  $not_null=$DB->field_N("not_null");
  $unique_key=$DB->field_N("unique_key");
  $multiple_key=$DB->field_N("multiple_key");
  $numeric=$DB->field_N("numeric");
  $blob=$DB->field_N("blob");
  $type=$DB->field_N("type");
  $unsigned=$DB->field_N("unsigned");
  $table=$DB->field_N("table");
  $c_f=count($name);
  print('таблица - '.$table[0]."<br>");
    print("<table border=1>");
    print("<tr>");
    print("<td>имя столбца</td>");
  for($i=0;$i<$c_f;$i++)
  {
     print("<td>$name[$i]</td>");
  }
  print("</tr><tr>");
  print("<td>максимальный размер столбца</td>");
   for($i=0;$i<$c_f;$i++)
  {
     print("<td>$max_length[$i]</td>");
  }
  print("</tr></table>");
по моему неплохо.
 

neko

tеam neko
по моему отвратительно.
все слепил в кучу и разметку и базу.
логика внутри вообще какая-то чудовищная.

но зато "сделал класс".

впрочем если это тебе будет удобно, дело конечно личное.
хотя я в этом, честно говоря, сомневаюсь.
 

.des.

Поставил пиво кому надо ;-)
нет слов.
pitbuly, включите error_reporting(E_ALL) и сами себе объясните, что такое у Вас в конструкторе $this->row = $row; $this->Query = $Query; etc..

и контрольный вопросы: а зачем этот класс? какие преимущества вы получили от такого класса?
 

pitbuly

Новичок
neko что вы понимаете под разметкой?
я не любитель строчить 10 функций когда можно зделать
одну.
 

pitbuly

Новичок
.des.
$this->Query = $Query; запрос к базе
можно наверное и так
$this->Query = '';
я хочу сделать менеджер баз данных.
по моему очень удобно (хотя может кое где коряво)
 

bkonst

.. хочется странного?...
Угу. Контрольный вопрос: какое значение имеет $Query в момент выполнения этой операции?
 

pitbuly

Новичок
neko а в классе никакой разметки нет
в конце просто пример (можно вставить в шаблон)
класс даёт информацию о базе а вы строете разметку как вам нужно.

-~{}~ 22.01.06 19:34:

bkonst определяет как public разве не так?
я не большой спец в OOP
 

bkonst

.. хочется странного?...
public, public, всё правильно. Проблема в другом:
PHP:
public function __construct($DB) {
  ...
  $this->Query = $Query;
  ...
}
Что делает оставленная (как пример) строчка, с твоей точки зрения? Какое значение имеет выражение $Query, которое стоит справа от знака равенства?

И так далее...
 

pitbuly

Новичок
без понятия .где-то в книжке такое видел и решил на всякий случай
(авось пригодиться)
а как надо?
 

neko

tеam neko
а может никак ненадо?
вот ты выше писал, что ты

> я не любитель строчить 10 функций когда можно зделать
> одну.

ну так напиши одну функцию, для начала.
зачем этот, прости господи, "класс"?
 

neko

tеam neko
кстати насчет книжек
их надо читать, а не только код оттуда переписывать кусками "на авось"
 
Сверху