Анимация
JavaScript
|
Главная Библионтека $Data=$this->TableGetResult( mysql query("select ".DataField." from $Name where id=1") Если таблица существует, то запрос окончится успешно. В этом случае нужно проверить, не изменилась ли таблица с момента последнего обращения, и если это так, то подкорректировать ее. if(@is array($Data)) { if(!is array($Fields)) { $this->Error="Couldnt create table: no fields specified"; return; Def0($Data["Fields"],array()); Def0($Data["Index"],array()); ** Возможно, что-то изменилось. Тогда в1полняем 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, иначе в ней остается ошибка от попытки чтения полей. $this->Error=""; $Lst=array(); foreach($Fields as $k=>$v) $Lst[]="$k $v"; foreach($Index as $k=>$v) $Lst[]="index index $k ($k".($v!=0?" ($v)":"").")"; if(!mysql query("create table $Name (".implode($Lst,",").")")) { $this->Error=mysql error(); return; $this->JustCreated=1; Сохраняем информацию о таблице, если она поменялась if(!empty($Changed)$this->JustCreated) { $Data["Fields"]=$Fields; $Data["Index"]=$Index; Def0($Data["Info"],array()); Информации не было - делаем пустой $Data=SqlPack($Data); if($this->JustCreated) { $Result=mysql query("insert into $Name(id,".DataField.") values(1,$Data)"); } else { $Result=mysql query("update $Name set ".DataField. "=$Data where id=1"); if(!$Result) { $this->Error=mysql error(); return; } $this->Fields=$Fields; $this->Index=$Index; Запис1вает в таблицу информацию, общую для всей таблиц:. Эта информация может быть получена потом только при помощи метода GetInfo(), и никак иначе. Например, если таблица используется для гостевой книги, мы можем сюда записывать какие-нибудь параметры этой книги - скажем, имя и пароль владельца. $Inf может быть чем угодно - даже массивом. function TableSetInfo($Inf) { $this->Error=""; Читаем информационную запись $r=mysql query("select ".DataField." from ". $this->TableName." where id=1"); if(!($Data=$this->GetResult($r))) return; Устанавливаем поле Info $Data["Info"]=$Inf; $Data=SqlPack($Data); Сохраняем результат if(!mysql query("update ".$this->TableName. " set ".DataField."=$Data where id=1")) { $this->Error=mysql error(); return; } return 1; function SetInfo($Inf) { return $this->TableSetInfo(&$Inf); } Возвращает информацию о таблице, ранее занесенную в нее при помощи SetInfo. Если информация не была занесена, возвращает пустой массив. function TableGetInfo() { $this->Error=""; Читаем информационную запись $r=mysql query("select * from ".$this->TableName." where id=1"); Если что-то не в порядке, GetResult установит поле Error у объекта if(!($Data=$this->GetResult($r))) return array(); if(!@is array($Data["Info"])) $Data["Info"]=array(); return $Data["Info"]; function GetInfo() { return $this->TableGetInfo(); } Уничтожает таблицу. Осторожно! Таблица удаляется без всяких предупреждений!!! function TableDrop() { $this->Error=""; if(!mysql query("drop table ".$this->TableName)) { $this->Error=mysql error(); return 0; return 1; 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 [ 156 ] 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 |