САМОУЧИТЕЛЬ PHP 4




Полноценный класс таблицы MySQL - часть 7


 if(!eregi("not null",$v)) $Fields[$k]=$v." not null";

 $Fields=array("id"=>"int auto_increment primary key")

 +$Fields+array(DataField=>"mediumblob");

 }

 Def0($Index,array());

 // Считываем из таблицы поле с ее параметрами

 $this->Fields=array(DataField=>"mediumblob");

 $Data=$this->TableGetResult(

 mysql_query("select ".DataField." from $Name where id=1")

 );

 // Если таблица существует, то запрос окончится успешно.

 // В этом случае нужно проверить, не изменилась ли таблица с момента

 // последнего обращения, и если это так, то подкорректировать ее.

 if(@is_array($Data)) {

 if(!is_array($Fields)) {

 $this->Error="Couldn't create table: no fields specified";

 return;

 }

 Def0($Data["Fields"],array());

 Def0($Data["Index"],array());

 //** Возможно, что-то изменилось. Тогда выполняем alter table.

 //1. Добавились поля?

 $Lst=array();

 foreach($Fields as $k=>$v) {

         if(!isSet($Data["Fields"][$k])) $Lst[]="add $k $v";

 else if($Data["Fields"][$k]!=$v) $Lst[]="change $k $k $v";

 }

 //2. Удалились поля?

 foreach($Data["Fields"] as $k=>$v)

 if(!isSet($Fields[$k])) $Lst[]="drop $k";

 //3. Добавились индексы?

 foreach($Index as $k=>$v) if(!isSet($Data["Index"][$k]))

 $Lst[]="add index index_$k ($k".($v!=0?" ($v)":"").")";

 //4. Удалились индексы?

 foreach($Data["Index"] as $k=>$v)

 if(!isSet($Index[$k])) $Lst[]="drop index index_$k";

 if(count($Lst)) {

         PrintDump($Lst);

 if(!mysql_query("alter table $Name ".implode($Lst,","))) {

 $this->Error=mysql_error();

 return;

 }

 $Changed=1;

 }

 $this->JustCreated=0;

 } else {

 // Необходимо создать таблицу.

 // BugFix by DM: При создании новой таблицы необходимо очистить

 // переменную Error, иначе в ней остается ошибка от попытки




Содержание  Назад  Вперед