class authors extends kitty { public $idauthor; public $Name; public $Year; }
private static $db; // private static $stack; //
static public function setup(mysqli $dbi,$enc = "utf8"){ if (is_object($dbi)){ self::$db = $dbi; self::$stack = new SplStack(); // return self::setEncoding($enc); // }else{ throw new Exception(" $dbi mysqli", 1); return false; } }
static function setEncoding($enc){ $result = self::$db->query("SET NAMES '$enc'"); // self::$stack->push("SET NAMES '$enc' [".($result ? "TRUE" : self::getError())."]"); return $result ? true : false; // }
static function getError(){ return self::$db->error." [".self::$db->errno."]"; }
Each self-respecting ORM library must contain screening (Ph.D., Assoc. Prof. Kovzhenkin VS)
private static function escape($string) { return mysqli_real_escape_string(self::$db,$string); }
private static function _getVars(){ return array_filter(get_class_vars(get_called_class()),function($elem){ if (!is_object($elem)) return true; }); }
static function findID($id){ if (is_numeric($id)){ // , $query = "SELECT * FROM `".get_called_class()."` WHERE `".key(self::_getVars())."` = $id LIMIT 1"; $result = self::$db->query($query); // self::$stack->push($query." [".$result->num_rows."]"); // if ($result->num_rows == 1){ // $row = $result->fetch_object(); // $cName = get_called_class(); // $rClass = new $cName(); // foreach ($row as $key => $value) $rClass->$key = $value; // return $rClass; // } else return false; // , } else return false; // }
$auth = authors::findID(2); if ($auth){ // }else{ // }
$auth->idauthor = 2; $auth->Name = " "; $auth->Year = "1818—1883";
public function Save(){ // - UPDATE $id = key(self::_getVars()); // if (!isset($this->$id) || empty($this->$id)) return $this->Add(); // , $query = "UPDATE `".get_called_class()."` SET "; // $columns = self::_getVars(); // $Update = array(); // foreach ($columns as $k => $v) { // if ($id != $k) // $Update[] = "`".$k."` = ".self::RenderField($this->$k); // } $query .= join(", ",$Update); // $query .= " WHERE `$id` = ".self::escape($this->$id)." LIMIT 1"; // $result = self::$db->query($query); self::$stack->push($query." [".($result ? "TRUE" : self::getError())."]"); // return ($result) ? true : false; // }
$auth->Name = " "; echo $auth->Save() ? "" : " ((";
private static function RenderField($field){ $r = ""; // switch (gettype($field)) { // case "integer": case "float": // int float $r = $field; break; case "NULL": $r = "NULL"; break; // NULL case "boolean": $r = ($field) ? "true" : "false"; break; // boolean case "string": // $p_function = "/^[a-zA-Z_]+\((.)*\)/"; // preg_match($p_function, $field,$mathes); // if (isset($mathes[0])){ // , $p_value = "/\((.+)\)/"; // preg_match($p_value, $field,$mValue); // if (isset($mValue[0]) && !empty($mValue[0])){ // $pv = trim($mValue[0],"()"); // $pv = "'".self::escape($pv)."'"; // $r = preg_replace($p_value, "($pv)" , $field); // } else $r = $field; // } else $r = "'".self::escape($field)."'"; // break; default: $r = "'".self::escape($field)."'"; break; // } return $r; // }
$auth = new authors(); $auth->Name = " "; $auth->Year = "1918-1983"; $auth->Add();
public function Add(){ // - INSERT $query = "INSERT INTO `".get_called_class()."` ("; // $columns = self::_getVars(); // $q_column = array(); // $q_data = array(); // foreach ($columns as $k => $v){ // $q_column[] = "`".$k."`"; // $q_data[] = self::RenderField($this->$k); // } $query .= join(", ",$q_column).") VALUES ("; // $query .= join(", ",$q_data).")"; // $result = self::$db->query($query); // $insert_id = self::$db->insert_id; // self::$stack->push($query." [".($result ? $insert_id : self::getError())."]"); // return ($result) ? $insert_id : false; // }
$auth = authors::findID(2); $auth->Remove();
public function Remove(){ // - DELETE $id = key(self::_getVars()); // if (!empty($this->$id)){ // $qDel = "DELETE FROM `".get_called_class()."` WHERE `$id` = ".$this->$id." LIMIT 1"; $rDel = self::$db->query($qDel); // self::$stack->push($qDel." [".($rDel ? "TRUE" : self::getError())."]"); // return $rDel ? true:false; // } else return false; // }
Source: https://habr.com/ru/post/305786/
All Articles