Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
)) { 
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 { 

Часть V. Приемы программирования на PHP 472 
// Необходимо создать таблицу. 
// 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; 
} 
// Записывает в таблицу информацию, общую для всей таблицы. Эта 
// информация может быть получена потом только при помощи метода 
// GetInfo(), и никак иначе. Например, если таблица используется для 
// гостевой книги, мы можем сюда записывать какие-нибудь параметры этой 
// книги — скажем, имя и пароль владельца. $Inf может быть чем угодно — 

Глава 31. Объектно-ориентированное программирование на PHP 473 
// даже массивом. 
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(
 
<<-[Весь Текст]
Страница: из 287
 <<-