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

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

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
 воспользоваться методом Select(), который по 
// запросу сразу возвращает массив со всеми обработанными результатами! 
function TableGetResult($r) 
{ $this->Error=""; 
// Выбираем очередную строку в виде массива 
if($r) $Result=mysql_fetch_array($r); 
else $this->Error=mysql_error(); 
if(!@is_array($Result)) return; 
// Перебираем все поля таблицы и записываем их в массив $Hash 
$Hash=array(); 
foreach($this->Fields as $k=>$i) 
if(isSet($Result[$k])) $Hash[$k]=$Result[$k]; 
// Распаковываем поле с данными 
$Hash+=SqlUnpack($Hash[DataField]); unSet($Hash[DataField]); 
$this->PostSelect($Hash); 
// Все сделано 
return $Hash; 
} 
function GetResult($r) { return $this->TableGetResult($r); } 
// Примечание: мы используем две функции, из которых GetResult() 
// просто является синонимом для TableGetResult(), чтобы позволить 
// производному классу вызывать функции MysqlTable, даже если они 
// переопределены в нем. К сожалению, в PHP это единственный метод 
// добиться цели. 
// Аналог mysql_num_rows() 
function GetNumRows($r) { return mysql_num_rows($r); } 

Часть V. Приемы программирования на PHP 470 
// Аналог mysql_data_seek(). После вызова этой функции указатель на 
// дескриптор $r "перескочит" на найденную запись номер $to, после 
// чего GetResult() ее и возвратит. 
function DataSeek($r,$to) { return mysql_data_seek($r,$to); } 
// Создает или загружает таблицу по имени $Name. 
// $Fields — список полей базы. Именно по ним в дальнейшем можно 
// будет вести поиск и строить индекс. Кроме того, в запись можно будет 
// добавлять ЛЮБЫЕ другие переменные, но они будут сериализованы, а 
// потом восстановлены. Формат списка: массив с ключами — именами 
// переменных и значениями — их типами. Если $Fields — не массив, то 
// считается, что таблица открывается такой, какой она есть. В противном 
// случае производится проверка: не добавились или не удалились ли какие- 
// то поля или индексы и, если это так, то выполняется соответствующая 
// модификация таблицы (кстати, это процесс довольно длительный). 
// ВНИМАНИЕ: если в таблице было какое-то поле, которое сериализуется, то 
// в будущем при добавлении этого поля к $Fields оно НЕ будет 
// автоматически переведено в ранг несущих, т. е. попросту 
// пропадет (и наоборот). 
// РЕКОМЕНДАЦИЯ: перечисляйте в $Fields те поля, для которых вы ТОЧНО 
// уверены, что они будут всегда присутствовать в базе, а также те, 
// по которым нужно будет вести поиск, строить индекс и использовать 
// distinct. 
// $Index — по каким полям нужно строить индекс. Индекс несколько 
// увеличивает размер базы, но зато вырастает скорость поиска по ней 
// (точнее, по тем полям, для которых используется индекс). Ключи — имена 
// столбцов, значения — "размер" индекса (0, если по умолчанию, что чаще 
// всего наиболее разумно) 
function MysqlTable($Name,$Fields="",$Index="") 
{ $this->TableName=$Name; $this->Error=""; 
if(is_array($Fields)) { 
foreach($Fields as $k=>$v) 
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"); 

Глава 31. Объектно-ориентированное программирование на PHP 471 
$Data=$this->TableGetResult( 
mysql_query("select ".DataField." from $Name where id=1") 
); 
// Если таблица существует, то запрос окончится успешно. 
// В этом случае нужно проверить, не изменилась ли таблица с момента 
// последнего обращения, и если это так, то подкорректировать ее. 
if(@is_array($Dat
 
<<-[Весь Текст]
Страница: из 287
 <<-