<?php
/**
* qq:731611736
* @author prince
* @copyright copyright (c) 2003-2014
* @version $Id:Db.class.php 2014-9-21 上午10:59:12
*/
class Db{
private $host = 'localhost';
private $user = 'root';
private $dbname = 'db';
private $pass = '';
private $cs = 'utf8';
private $tp = 'hnsthm_';
private $m = null;
private $css = <<<e
<style>
.page a{
text-decoration:none;
font-size:12px;
border:1px solid gray;
border-radius:4px;
display:block;
padding:5px;
min-width:15px;
float:left;
text-align:center;
margin:0 5px;
}
.page a:hover{
border:1px solid red;
border-radius:4px;
}
.page span{
font-size:12px;
border-radius:4px;
border:1px solid gray;
display:block;
padding:5px;
min-width:15px;
font-weight:800;
float:left;
text-align:center;
}
</style>
e;
public function __construct($host = 'localhost', $user = 'root', $pass = '', $dbname = 'db', $cs = 'utf8', $tp = '') {
$this->host = $host;
$this->user = $user;
$this->pass = $pass;
$this->dbname = $dbname;
$this->cs = $cs;
$dsn = "mysql:host=$host;dbname=$dbname";
$this->tp = $tp;
$opt = array (
1002 => "set names $cs"
);
try {
$this->m = new PDO ( $dsn, $user, $pass, $opt );
} catch ( Exception $e ) {
exit ( '数据库连接失败,请检查...' );
}
}
public function page($t, $ps = 5, $p = 1, $f = '*', $w = '1=1', $o = '') {
$table = $this->tp.$t;
$recordcount = $this->count($t,$w);
$pagecount = ceil ( $recordcount / $ps );
$p = $p < 1 ? 1 : $p;
$p = $p > $pagecount ? $pagecount : $p;
$start = ($p - 1) * $ps;
$stmt = $this->m->prepare ( "select $f from $t where $w $o limit $start,$ps" );
$stmt->execute ();
$rs = $stmt->fetchAll ( 3 );
$stmt->closeCursor ();
$info = $this->css . '<div class=page>';
if ($p > 1) {
$info .= sprintf ( "<a href='?p=%d'>上一页</a> ", $p - 1 );
}
$ss = 1;
$ee = 10;
if ($p > 6) {
$ss = $p - 5;
$ee = $ss + 9;
}
if ($pagecount < $ee) {
$ee = $pagecount;
} else if ($ee >= $pagecount) {
$ee = $pagecount;
$ss = $ee - 9;
}
for($n = $ss; $n <= $ee; $n ++) {
if ($n == $p) {
$info .= sprintf ( "<span>%d</span>", $n );
continue;
}
$info .= sprintf ( "<a href='?p=%d'>%d</a> ", $n, $n );
}
if ($p < $pagecount) {
$info .= sprintf ( "<a href='?p=%d'>下一页</a> ", $p + 1 );
}
$info .= '</div>';
return array (
$rs,
$info,
$p,
$ps,
$recordcount
);
}
public function save($tn, $data) {
$table = $this->tp . $tn;
foreach ( $data as $k => $v ) {
$key [] = $k;
$keys [] = ':' . $k;
}
$k = implode ( ',', $key );
$v = implode ( ',', $keys );
$sql = "insert into $table($k) values($v)";
$stmt = $this->m->prepare ( $sql );
$stmt->execute ( $data );
$stmt->closeCursor ();
}
public function delete($tn, $where = '1=1') {
$table = $this->tp . $tn;
$sql = "delete from $table where $where";
$this->m->exec ( $sql );
}
public function update($tn, $where='1=1', $data) {
$table = $this->tp . $tn;
foreach ( $data as $k => $v ) {
$key [] = $k.'=:'.$k;
}
$k = implode ( ',', $key );
$sql = "update $table set $k where $where";
$stmt = $this->m->prepare ( $sql );
$stmt->execute ( $data );
$stmt->closeCursor ();
}
public function __destruct() {
unset ( $this->m );
}
public function load($fn=null){
$fn = empty($fn) ? dirname(__FILE__).'/db.sql' : $fn;
$sql = file_get_contents($fn);
$sqls = explode(";\r\n",$sql);
foreach($sqls as $v){
$this->exec($v);
}
}
public function backup($fn=null){
$fn = empty($fn) ? dirname(__FILE__).'/db'.date('YmdHis').'.sql' : $fn;
$result = $this->m->query('show tables');
$rs = $result->fetchAll(PDO::FETCH_NUM);
$ddd = '';
foreach($rs as $v){
$ddd.="\r\n\r\n/* $v[0] */\r\n";
$r = $this->m->query('show create table '.$v[0]);
$rrr = $r->fetchAll(PDO::FETCH_NUM);
$ddd.=$rrr[0][1].";\r\n";
$trs = $this->m->query("select * from $v[0]");
$tr = $trs->fetchAll(PDO::FETCH_ASSOC);
$data = array();
foreach($tr as $tv){
$val = '';
foreach($tv as $k=>$v2){
$val[]="'$v2'";
}
$data[] = "(". implode(',',$val) .")";
}
if(count($data)>0){
$d = implode(',',$data);
$ddd.="insert into `$v[0]` values ".$d.";\r\n\r\n\r\n";
}
}
$ds = <<<sql
/*!40101 SET NAMES $this->cs */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`$this->dbname` /*!40100 DEFAULT CHARACTER SET $this->cs */;
USE `$this->dbname`;
$ddd
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
sql;
file_put_contents($fn, $ds);
}
public function exec($s){
if(trim($s)==''){
}else{
$this->m->exec($s);
}
}
public function count($t,$where='1=1'){
$table = $this->tp.$t;
$sql = "select count(*) from $table where $where";
$r = $this->m->query ( $sql );
$recordcount = $r->fetchColumn ();
return $recordcount;
}
}
/**
* qq:731611736
* @author prince
* @copyright copyright (c) 2003-2014
* @version $Id:Db.class.php 2014-9-21 上午10:59:12
*/
class Db{
private $host = 'localhost';
private $user = 'root';
private $dbname = 'db';
private $pass = '';
private $cs = 'utf8';
private $tp = 'hnsthm_';
private $m = null;
private $css = <<<e
<style>
.page a{
text-decoration:none;
font-size:12px;
border:1px solid gray;
border-radius:4px;
display:block;
padding:5px;
min-width:15px;
float:left;
text-align:center;
margin:0 5px;
}
.page a:hover{
border:1px solid red;
border-radius:4px;
}
.page span{
font-size:12px;
border-radius:4px;
border:1px solid gray;
display:block;
padding:5px;
min-width:15px;
font-weight:800;
float:left;
text-align:center;
}
</style>
e;
public function __construct($host = 'localhost', $user = 'root', $pass = '', $dbname = 'db', $cs = 'utf8', $tp = '') {
$this->host = $host;
$this->user = $user;
$this->pass = $pass;
$this->dbname = $dbname;
$this->cs = $cs;
$dsn = "mysql:host=$host;dbname=$dbname";
$this->tp = $tp;
$opt = array (
1002 => "set names $cs"
);
try {
$this->m = new PDO ( $dsn, $user, $pass, $opt );
} catch ( Exception $e ) {
exit ( '数据库连接失败,请检查...' );
}
}
public function page($t, $ps = 5, $p = 1, $f = '*', $w = '1=1', $o = '') {
$table = $this->tp.$t;
$recordcount = $this->count($t,$w);
$pagecount = ceil ( $recordcount / $ps );
$p = $p < 1 ? 1 : $p;
$p = $p > $pagecount ? $pagecount : $p;
$start = ($p - 1) * $ps;
$stmt = $this->m->prepare ( "select $f from $t where $w $o limit $start,$ps" );
$stmt->execute ();
$rs = $stmt->fetchAll ( 3 );
$stmt->closeCursor ();
$info = $this->css . '<div class=page>';
if ($p > 1) {
$info .= sprintf ( "<a href='?p=%d'>上一页</a> ", $p - 1 );
}
$ss = 1;
$ee = 10;
if ($p > 6) {
$ss = $p - 5;
$ee = $ss + 9;
}
if ($pagecount < $ee) {
$ee = $pagecount;
} else if ($ee >= $pagecount) {
$ee = $pagecount;
$ss = $ee - 9;
}
for($n = $ss; $n <= $ee; $n ++) {
if ($n == $p) {
$info .= sprintf ( "<span>%d</span>", $n );
continue;
}
$info .= sprintf ( "<a href='?p=%d'>%d</a> ", $n, $n );
}
if ($p < $pagecount) {
$info .= sprintf ( "<a href='?p=%d'>下一页</a> ", $p + 1 );
}
$info .= '</div>';
return array (
$rs,
$info,
$p,
$ps,
$recordcount
);
}
public function save($tn, $data) {
$table = $this->tp . $tn;
foreach ( $data as $k => $v ) {
$key [] = $k;
$keys [] = ':' . $k;
}
$k = implode ( ',', $key );
$v = implode ( ',', $keys );
$sql = "insert into $table($k) values($v)";
$stmt = $this->m->prepare ( $sql );
$stmt->execute ( $data );
$stmt->closeCursor ();
}
public function delete($tn, $where = '1=1') {
$table = $this->tp . $tn;
$sql = "delete from $table where $where";
$this->m->exec ( $sql );
}
public function update($tn, $where='1=1', $data) {
$table = $this->tp . $tn;
foreach ( $data as $k => $v ) {
$key [] = $k.'=:'.$k;
}
$k = implode ( ',', $key );
$sql = "update $table set $k where $where";
$stmt = $this->m->prepare ( $sql );
$stmt->execute ( $data );
$stmt->closeCursor ();
}
public function __destruct() {
unset ( $this->m );
}
public function load($fn=null){
$fn = empty($fn) ? dirname(__FILE__).'/db.sql' : $fn;
$sql = file_get_contents($fn);
$sqls = explode(";\r\n",$sql);
foreach($sqls as $v){
$this->exec($v);
}
}
public function backup($fn=null){
$fn = empty($fn) ? dirname(__FILE__).'/db'.date('YmdHis').'.sql' : $fn;
$result = $this->m->query('show tables');
$rs = $result->fetchAll(PDO::FETCH_NUM);
$ddd = '';
foreach($rs as $v){
$ddd.="\r\n\r\n/* $v[0] */\r\n";
$r = $this->m->query('show create table '.$v[0]);
$rrr = $r->fetchAll(PDO::FETCH_NUM);
$ddd.=$rrr[0][1].";\r\n";
$trs = $this->m->query("select * from $v[0]");
$tr = $trs->fetchAll(PDO::FETCH_ASSOC);
$data = array();
foreach($tr as $tv){
$val = '';
foreach($tv as $k=>$v2){
$val[]="'$v2'";
}
$data[] = "(". implode(',',$val) .")";
}
if(count($data)>0){
$d = implode(',',$data);
$ddd.="insert into `$v[0]` values ".$d.";\r\n\r\n\r\n";
}
}
$ds = <<<sql
/*!40101 SET NAMES $this->cs */;
/*!40101 SET SQL_MODE=''*/;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`$this->dbname` /*!40100 DEFAULT CHARACTER SET $this->cs */;
USE `$this->dbname`;
$ddd
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
sql;
file_put_contents($fn, $ds);
}
public function exec($s){
if(trim($s)==''){
}else{
$this->m->exec($s);
}
}
public function count($t,$where='1=1'){
$table = $this->tp.$t;
$sql = "select count(*) from $table where $where";
$r = $this->m->query ( $sql );
$recordcount = $r->fetchColumn ();
return $recordcount;
}
}