白云图书馆管理系统 —— 课程作业项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

146 lines
4.5 KiB

<?php
namespace model;
class database {
private $pdo = null, $table, $where, $order, $limit, $prepare;
public function __construct() {
if ($this->pdo == null) {
try {
$this->pdo = new \PDO('mysql:host='.$GLOBALS['config']['database']['host'].';dbname='.$GLOBALS['config']['database']['database'],
$GLOBALS['config']['database']['username'], $GLOBALS['config']['database']['password'], [\PDO::ATTR_PERSISTENT => true]);
} catch (PDOException $e) {
exit('Error: ' . $e->getMessage());
}
}
$this->table = null;
$this->where = [];
$this->order = '';
$this->limit = '';
$this->prepare = '';
}
public function table(string $table) {
$this->table = $table;
return $this;
}
public function where(array $where) {
$this->where = array_merge($this->where, $where);
return $this;
}
public function like($name, $word) {
$this->order = ' where `'.$name.'` like "%'.$word.'%"';
return $this;
}
public function group_by($name) {
$this->order = ' group by `'.$name.'`';
return $this;
}
public function select($select = null) {
$this->prepare_where();
if (is_array($select)) {
$select = '`'.implode('`, `', $select).'`';
} elseif ($select == 'count(*)') {
$select = 'count(*)';
} elseif (!empty($select)) {
$select = '`'.$select.'`';
} else {
$select = '*';
}
$db = $this->pdo->prepare("select $select from `$this->table`$this->where$this->order$this->limit");
$db->execute($this->prepare);
if ($db = $db->fetchAll(\PDO::FETCH_ASSOC))
return count($db) > 1 ? $db : $db[0];
else return false;
}
public function insert(array $data) {
if (count($data) > 1) {
$keys = '`'.implode('`, `', array_keys($data)).'`';
foreach ($data as $v) $values[] = '?';
$values = implode(', ', $values);
} else {
$keys = '`'.array_keys($data)[0].'`';
$values = '?';
}
$db = $this->pdo->prepare("insert into `$this->table`($keys) values($values)");
return $db->execute(array_values($data));
}
public function update(array $data) {
$this->prepare_where();
if (count($data) > 1) {
$update = '`'.implode('` = ?, `', array_keys($data)).'` = ?';
} else {
$update = '`'.array_keys($data)[0].'` = ?';
}
$db = $this->pdo->prepare("update `$this->table` set $update$this->where");
return $db->execute(array_merge(array_values($data), $this->prepare));
}
public function delete() {
$this->prepare_where();
$db = $this->pdo->prepare("delete from `$this->table`$this->where");
return $db->execute($this->prepare);
}
public function count() {
return $this->select('count(*)')['count(*)'];
}
public function last($last) {
$this->order = ' order by `'.$last.'` desc';
$this->limit = ' limit 1';
return $this->select();
}
public function page(int $limit, int $page) {
$this->limit = ' limit '.($page-1)*$limit.', '.$limit;
return $this->select();
}
public function pdo_query($sql) {
$db = $this->pdo->query($sql);
if ($db = $db->fetchAll(\PDO::FETCH_ASSOC))
return count($db) > 1 ? $db : $db[0];
else return false;
}
public function pdo_prepare($sql) {
$this->prepare = $sql;
return $this;
}
public function execute($arr) {
$db = $this->pdo->prepare($this->prepare);
$db->execute($arr);
if ($db = $db->fetchAll(\PDO::FETCH_ASSOC))
return count($db) > 1 ? $db : $db[0];
else return false;
}
private function prepare_where() {
$where = '';
$this->prepare = [];
if (!empty($this->where) && is_array($this->where)) {
$where = ' where ';
if (count($this->where) > 1) {
$where .= '`'.implode('` = ? and `', array_keys($this->where)).'` = ?';
} else $where .= '`'.array_keys($this->where)[0].'` = ?';
$this->prepare = array_values($this->where);
}
$this->where = $where;
}
}