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

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

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
 
// всех остальных полей). Кроме того, в запись можно вводить 
// произвольные поля — они тоже будут сохраняться, но по 
// ним нельзя будет вести поиск (предложение "select"), 
// потому что эти поля будут автоматически сериализованы при 
// добавлении/изменении записи и распакованы при извлечении. 
class MysqlTable { 
//*** Внутренние переменные 
var $TableName; // имя таблицы 
var $UniqVars; // список уникальных полей (имя=1, имя=1...) 
var $Index; // для этих полей построены индексы (имя=1, имя=1...) 

Часть V. Приемы программирования на PHP 468 
var $Fields; // все физические поля таблицы (имя=тип, имя=тип...) 
var $Error; // текст последней ошибки ("", если нет) 
var $JustCreated; // 1, если таблица была создана, а не загружена 
//*** Внутренние функции 
// Упаковывает поля массива в строку, за исключением тех, которые 
// сами являются непосредственными полями в базе данных. 
function _PackFields(&$Hash) 
{ $Data=array(); 
foreach($Hash as $k=>$v) if($k!=DataField) 
if(!isSet($this->Fields[$k])) $Data[$k]=$v; 
return Serialize($Data); 
} 
// Виртуальная функция производного класса вызывается ПЕРЕД любым 
// занесением данных в таблицу (добавлением и обновлением). То есть 
// она предназначена для "прозрачной" автоматической генерации некоторых 
// полей записи (например, времени ее изменения) в производном классе 
// перед ее сохранением. 
// Можно, к примеру, в таблице держать какую-нибудь дату в формате 
// SDN, а "делать вид", что она хранится в обычном представлении 
// "дд.мм.гггг". 
// Если эта функция возвратит 0, то операция закончится с ошибкой. 
function PreModify(&$Rec) { return 1; } 
// Виртуальная функция вызывается ПОСЛЕ выборки записи из таблицы, а 
// также в конце модификации записи. То есть она предназначена для 
// "прозрачной" модификации только что полученной из таблицы записи. 
// Возвращаясь к предыдущему примеру, мы можем при извлечении записи 
// из таблицы STM-поле преобразовать в "дд.мм.гггг", и "никто ничего 
// не заметит". 
function PostSelect(&$Rec) { return; } 
// Возвращает имя таблицы 
function GetTableName() { return $this->TableName; } 
// Возвращает результат запроса select. В дальнейшем этот результат 
// (дескриптор) будет, скорее всего, обработан при помощи GetResult(). 
// $Expr — выражение SQL, по которому будет идти выборка 
// $Order — правила сортировки (по умолчанию — по убыванию id) 
function TableSelectQuery($Expr="",$Order="id desc") 
{ $this->Error=""; 
if(!$Expr) $Expr="1=1"; 
$r=mysql_query("select * from ".$this->TableName. 

Глава 31. Объектно-ориентированное программирование на PHP 469 
" where ($Expr) and (id>1) order by $Order"); 
if(!$r) { $this->Error=mysql_error(); return; } 
return $r; 
} 
function SelectQuery($Expr="",$Order="id desc") 
{ return $this->TableSelectQuery($Expr,$Order); } 
// Возвращает результат предыдущего запроса select (точнее, очередную 
// найденную запись) в виде распакованного (!) массива. Если 
// SelectQuery() нашла несколько записей, то, последовательно вызывая 
// GetResult(), можно считать их все. Метод делает всю "черную" работу 
// по сериализации. Еще раз: если у результата несколько строк, то метод 
// возвращает очередную. Если строки кончились, возвращает "". 
// Чаще всего в вызове этой функции (и функции SelectQuery) нет 
// необходимости — можн
 
<<-[Весь Текст]
Страница: из 287
 <<-