db = new \PDO("mysql:dbname=$dbname;host=$dbhost;charset=utf8mb4",$dbuser,$dbpass); //$this->query("SET NAMES 'utf8' COLLATE 'utf8_general_ci'"); } function query($query,$params = array()) { $q = $this->db->prepare($query); $q->execute($params); $e = $q->errorInfo(); if($e[0]!='00000') { print ""; print $e[2]; print ""; return false; } return $q; } function nextRecord($query) { $next = $query->fetchObject(); return $next; } function id() { return $this->db->lastInsertId(); } function update($table,$id,$data) { $values = array(); foreach($data as $k=>$v) { $values[] = "`" . $k . "`" . "=:" . $k; } $query = sprintf("UPDATE `%s` set " . implode(",",$values) . " WHERE id=:id",$table); $data['id'] = $id; $q = $this->query($query,$data); $id = $this->id(); return $id; } function insert($table,$data) { $fields = array(); $values = array(); foreach($data as $k=>$v) { $fields[] = $k; $values[] = ":" . $k; } $query = sprintf("INSERT IGNORE INTO `%s` (" . implode(",",$fields) . ") VALUES (" . implode(",",$values) . ")",$table); $q = $this->query($query,$data); $id = $this->id(); return $id; } function set($table,$record,$field,$value) { $this->query("UPDATE `$table` SET `$field`=:f WHERE id=:i",array( 'f'=>$value, 'i'=>$record )); } function select($table,$record) { $query = sprintf("SELECT * FROM `%s` WHERE id=:id",$table); $q = $this->query($query,array("id" => $record)); $r = $this->nextRecord($q); return $r; } function getTableStructure($table) { $query = sprintf("DESCRIBE `%s`", $table); $q = $this->query($query); $fields = []; while ($r = $this->nextRecord($q)) { $field = $r['Field']; $type = $r['Type']; $extra = $r['Extra']; $fingerprint = trim("$type $extra"); $f = new stdClass; $f->name = $field; if (preg_match('/^(.*)\((\d+)\)(.*)$/', $fingerprint, $m)) { $fingerprint = $m[1] . $m[3]; $f->length = $m[2]; } $f->type == -1; $f->unsigned = false; switch ($fingerprint) { case "bigint unsigned auto_increment": $f->type = MODEL_SERIAL; break; case "text": $f->type = MODEL_TEXT; break; case "longtext": $f->type = MODEL_TEXT; break; case "blob": $f->type = MODEL_TEXT; break; case "longblob": $f->type = MODEL_TEXT; break; case "tinyint": $f->type = MODEL_TINYINT; break; case "tinyint unsigned": $f->type = MODEL_TINYINT; $f->unsigned = true; break; case "int": $f->type = MODEL_INT; break; case "int unsigned": $f->type = MODEL_INT; $f->unsigned = true; break; case "bigint": $f->type = MODEL_BIGINT; break; case "bigint unsigned": $f->type = MODEL_BIGINT; $f->unsigned = true; break; case "char": $f->type = MODEL_CHAR; break; case "varchar": $f->type = MODEL_VARCHAR; break; } } } public function all($query) { $o = new Collection; while ($r = $this->nextRecord($query)) { $o->push($r); } return $o; } }