проверка наличия поля в БД

Тема в разделе "Программирование", создана пользователем LarikAN, 03.07.2013.

  1. Offline

    LarikAN Недавно здесь

    Регистрация:
    03.07.2013
    Сообщения:
    1
    Симпатии:
    0
    Пол:
    Мужской
    Перерылл множество мануалов и не и как не могу найти ответ
    Суть задачи:
    Нужно с помощью стандартых классов (желательно) Joomla 1.5 проверить наличие поля в заданной таблице БД и при его отсутствии сосздать его средствами РНР, используя стандартные классы Joomla 1.5 вместо прямого обращения к БД.

    Вот мой код без использования Joomla, это работает (соединение с БД уже установленно):
    Код (PHP):
    1. /**
    2.  * Добавление несуществующего поля в таблицу
    3.  * Если таблица не существует то она создается пустой и в нее добавляется указонное поле!!!
    4.  */
    5. function AddFields($FullNameTable, $DimField)  
    6.  {  
    7.  //$FullNameTable - полное (с префиксом базы) название таблицы в базе
    8.  //$DimField - двухмерный  ассоциативный массив добавляемых полей их параметров строка массива в формате:
    9.  //'name' => 'ИМЯ поля',
    10.  //'type' => 'ТИП поля',
    11.  //'options' => 'Опции поля',
    12.  //'value' => 'ЗНАЧЕНИЕ по умолчанию')
    13.  $DimResult = array(); //КОД результата выполнения функции
    14.  $NumResult = 0; //счетчик записей в массиве КОД результата выполнения функции
    15.  
    16.  $TableFind = mysql_query("SELECT 1 FROM `".$FullNameTable."` WHERE 0");
    17.  if ($TableFind == '') {
    18.   $DimResult[] = array('code' => 1, 'mess'=> $FullNameTable); //КОД результата  - ТАБЛИЦА НЕ существует
    19.   //создание таблицы
    20.   $sql_txt = "CREATE TABLE `".$FullNameTable."`"; //имя таблицы
    21.   $sql_txt .= " (id INT (11) UNSIGNED NOT NULL AUTO_INCREMENT, PRIMARY KEY (id))";
    22.   mysql_query($sql_txt) or die(mysql_error());
    23.   $Mess = "Table: [".$FullNameTable."]  Field: [".$DimField[$key]['name']."] Operation: [CREATE Table]=Ok!";
    24.   $DimResult[] = array('code' => 2, 'mess'=> $FullNameTable); //КОД результата  - ТАБЛИЦА успешно добавлена
    25.  } else {
    26.   $DimResult[] = array('code' => 3, 'mess'=> $FullNameTable); //КОД результата  - ТАБЛИЦА существует
    27.  }
    28.  
    29.  //перебор массива заданных полей (столбцов таблицы)
    30.  foreach($DimField as $key => $val) {
    31.   //проверка существования поля (столбца)
    32.   $FieldFind = mysql_query("SELECT ".$DimField[$key]['name']." FROM `".$FullNameTable."` WHERE 0");
    33.   //СОЗДАНИЕ НОВОГО поля
    34.   if ($FieldFind == '') {
    35.    $DimResult[] = array('code' => 4, 'mess'=> $FullNameTable); //КОД результата  - ПОЛЕ НЕ существует
    36.    $sql_txt = "ALTER TABLE `".$FullNameTable."` ADD ";
    37.    $sql_txt .= " ".$DimField[$key]['name'].""; //имя поля
    38.    $sql_txt .= " ".$DimField[$key]['type']; // тип поля
    39.    $sql_txt .= " ".$DimField[$key]['options']; // опции поля
    40.    $sql_txt .= " ".$DimField[$key]['value']; //значение по умолчанию
    41.    mysql_query($sql_txt) or die(mysql_error());
    42.    $Mess = "Table: [".$FullNameTable."]  Field: [".$DimField[$key]['name']."] Operation: [ADD field]=Ok!";
    43.    $DimResult[] = array('code' => 5, 'mess' => $Mess); //КОД результата  - ПОЛЕ успешно добавлено
    44.   }
    45.   //ОБНОВЛЕНИЕ ТИПА существующего поля
    46.   else {
    47.    $DimResult[] = array('code' => 6, 'mess'=> $FullNameTable); //КОД результата  - ПОЛЕ существует
    48.    $sql_txt = "ALTER TABLE `".$FullNameTable."`"; //имя таблицы
    49.    $sql_txt .= " CHANGE ".$DimField[$key]['name']; //СТАРОЕ имя поля
    50.    $sql_txt .= " ".$DimField[$key]['name']; //НОВОЕ имя поля
    51.    $sql_txt .= " ".$DimField[$key]['type']; // тип поля
    52.    $sql_txt .= " ".$DimField[$key]['options']; // опции поля
    53.    $sql_txt .= " ".$DimField[$key]['value']; //значение по умолчанию
    54.    mysql_query($sql_txt) or die(mysql_error());
    55.    $Mess = "Table: [".$FullNameTable."]  Field: [".$DimField[$key]['name']."] Operation: [UPDATE Type field]=Ok!";
    56.    $DimResult[] = array('code' => 7, 'mess' => $Mess); //КОД результата  - ПОЛЕ успешно добавлено
    57.   }
    58.  }
    59.  return $DimResult;
    60. }
    61.  
    62. $FullNameTable = 'jos_test'; //полное  имя таблицы  в БД
    63. $DimField = array(); //ассоциативный массив  (имя  элемента-это имя  поля) проверяемых (добавляемых) полей в таблицу
    64.   $DimField['block'] = array('name' => "block", 'type' => "SET ('0','1')", 'value' =>"DEFAULT NULL"); //поле 'block'
    65.   $DimField['position'] = array('name' => 'position', 'type' => "INT (11)", 'value' => 'DEFAULT NULL'); //поле  'position'
    66.   $DimResult = AddFields($FullNameTable, $DimField);
    67.   $ParamMessReport .= $otstup.$FullNameTable.' -> OK!';


    теперь это нужно изменить так чтобы этот код вставить в модуль для Joomla 1.5 заменив все опрерации работы с БД на методы классов Joomla.....у меня это не выходит (((
    Возможно я по неопытности что то упустил в своих поисках помогите пожалуйста...
     
  2.  
  3. woojin
    Offline

    woojin Местный Команда форума

    Регистрация:
    31.05.2009
    Сообщения:
    3 209
    Симпатии:
    335
    Пол:
    Мужской
    Код (PHP):
    1. $db=& JFactory::getDBO();
    2. $db->setQuery('тут какойто запрос');
    3. $db->getErrorNum(); //номер ошибки
    4. $db->getErrorMsg($escaped = false); //текст ошибки
    5. $db->function getLog( ); // лог работы (лог ошибок)

    пользуйся
    P.S. а вообще очень помогает просмотр исходников, конкретно для J1.5 \libraries\joomla\database\
     

Поделиться этой страницей

Загрузка...