| |
{ return $this->TableGetInfo(); }
// Уничтожает таблицу. Осторожно! Таблица удаляется без всяких
// предупреждений!!!
function TableDrop()
{ $this->Error="";
if(!mysql_query("drop table ".$this->TableName)) {
$this->Error=mysql_error();
return 0;
}
return 1;
}
Часть V. Приемы программирования на PHP 474
function Drop() { return $this->TableDrop(); }
// Добавляет запись $Rec (обычно это ассоциативный массив с некоторыми
// установленными полями) в таблицу. Автоматически у нее проставляется
// id, а также проверяется, уникальны ли у записи те поля, которые должны
// быть уникальными (указываются в конструкторе). Возвращает 1 в случае
// успеха, при этом в $Rec содержится окончательно сформированная
// запись.
function TableAdd(&$Rec)
{ $this->Error="";
if(!$this->PreModify($Rec)) return 0;
// Иначе все в порядке. Добавляем запись.
$Rec[DataField]=$this->_PackFields($Rec);
// Составляем список имен полей и их значений
$LNames=$LVals=array();
foreach($this->Fields as $name=>$type) {
$LNames[]=$name;
$LVals[]="'".Apostrophs($Rec[$name])."'";
}
$LNames=implode($LNames,",");
$LVals=implode($LVals,",");
unSet($Rec[DataField]);
// Добавляем
if(!mysql_query("insert into ".$this->TableName.
"($LNames) values($LVals)"))
{ $this->Error=mysql_error(); return 0; }
$Rec["id"]=mysql_insert_id();
$this->PostSelect($Rec);
return 1;
}
function Add(&$Rec) { return $this->TableAdd(&$Rec); }
// Удаляет из таблицы записи, удовлетворяющие выражению $Expr.
// Например: $Tbl->Delete("(id=$id) or (id=0)");
function TableDelete($Expr)
{ $this->Error="";
if(!mysql_query("delete from ".$this->TableName.
" where ($Expr) and (id>1)"))
{ $this->Error=mysql_error(); return 0; }
return 1;
Глава 31. Объектно-ориентированное программирование на PHP 475
}
function Delete($Expr) { return $this->TableDelete($Expr); }
// Возвращает массив записей (ключ — id, значение — запись). В массив
// будет занесено не более $Num записей. Для каждой записи
// вызывается PostSelect()!
function TableSelect($Expr="",$Num=100000,$Order="id desc")
{ $this->Error="";
// Выполнить запрос
$r=$this->SelectQuery($Expr,$Order); if(!$r) return 0;
// Цикл по найденным записям
for($i=0,$Found=array(); $i<$Num&&($Rec=$this->GetResult($r)); $i++)
$Found[$Rec["id"]]=$Rec;
return $Found;
}
function Select($Expr="",$Num=100000,$Order="id desc")
{ return $this->TableSelect($Expr,$Num,$Order); }
// Обновляет запись в таблице, при этом запись $Upd изменяется и
// становится фактически такой, как она будет выглядеть после обновления.
// То есть к ней могут добавиться новые поля из таблицы. Если записи с
// таким id нет (когда $id не указан в параметрах, его значение берется
// равным $Upd["id"]), то генерируется ошибка!
// Возможно, в записи $Upd не задан идентификатор id (это бывает, если
// мы только что получили данные из формы). В этом случае можно этот
// идентификатор передать через $id.
// Итак, при обновлении id НЕ МЕНЯЕТСЯ по определению (в отличие от
// ДОБАВЛЕНИЯ, когда id всегда проставляется)!
function TableUpdate(&$Upd,$id=0)
{ $this->Error="";
// Если задан $id, то устанавливаем в записи этот идентификатор
if($id) $Upd["id"]=$id;
// Загружаем старую запись. Она должна быть одна.
$r=$this->SelectQuery("id=".$Upd["id"]);
$Rec=$this->GetResult($r);
// Если не удалось, значит, неверное обновление — записи
// еще не существует
if(!$Rec) { $this->Error="NotExists"; return 0; }
// Иначе все в порядке — добавляем. Сначала обновляем
// поля и упаковываем переменные
Часть V. Приемы программирования на PHP 476
$Rec=$Upd+$Rec; $Upd=$Rec;
if(!$this->PreModify($Rec)) return 0;
$Rec[DataField]=$this->_PackFields($Rec);
// Затем составляем список полей для обновления
$Lst=array();
foreach($this->Fields as $name=>$type)
$Lst[]="$name='".Apostrophs($Rec[$name])."'";
$Lst=implode($Lst,",");
// Выполняем запрос
if(!mysql_query("update ".$this->TableName.
" set $Lst where id=".$Rec["id"]))
{ $this->Error=mysql_error(); return 0; }
$this->PostSelect($Rec);
return 1;
}
function Update(&$Upd,$id=0) { return $this->TableUpdate(&$Upd,$id); }
// Возвращает число записей, удовлетворяющих выражению $Expr.
// Если $Expr не задано, возвращает число ВСЕХ записей.
function TableGetCount($Expr="")
{ $this->Error="";
if(!$Expr) $Expr="1=1";
$r=mysql_query("select count(if(($Expr) and (id>1),1,NULL)) from ".
$this->TableName);
if(!$r) { $this->Error=mysql_error(); return 0; }
$a=mysql_fetch_array($r);
return $a[0];
}
function GetCount($Expr="") { return $this->TableGetCount($Expr); }
// Возвращает СПИСОК всех уникальных значений поля $field
// в таблице, удовлетворяющих тому же условию $Expr.
// ВНИМАНИЕ: эта функция работает лишь тогда, когда поле $field
// присутствовало среди полей $Fields при вызове конструкт
|
|