Model.class.php

WBOY
WBOYオリジナル
2016-06-23 14:33:361160ブラウズ

include 'config.php';

class Model{

//用户名

protected $user; //密码

protected $パスワード;

//主机

protected $host;

//ライブラリ名は配列です

protected $dbName=array();

//Charset

protected $charset='utf8' //接続リソースは配列です

protected $_link=array();

// 共通テーブル名

protected $tabName;

protected $trueTabName // テーブルプレフィックス

protected $prefix;

//フィールドキャッシュ

protected $fields;

//テーブルを作成する SQL ステートメント

protected $createSql='CREATE TABLE IF NOT EXISTS __TABLENAME__(

`id` mediaint(9) NOT NULL AUTO_INCREMENT,

`username ` char(15) NOT NULL,

`password` char(32) NOT NULL,

`createtime` int(11) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET= utf8 AUTO_INCREMENT=1;';

//1、ID から残りを取得して実際のテーブル名を取得 mod

//2、ユーザー名 substr の最初の数桁をインターセプト

//3、md5 md5

// 4、ライブラリ、テーブルなし、なしotected $ partition = array tabname = ''){

$ this-> =$this->prefix.ucfirst(strto lower(substr(get_class($this),0,-5)));

}else{ .$tabName >dbName,$this->charset) ;

}

public function connect($host,$user,$pwd,$dbName,$charset,$linkId=0){

$conn=mysql_connect($ host,$user,$pwd); if(mysql_errno()){

$this->error(-1,$conn);

falseを返します。

}

if(!$this->selectDb($dbName[$linkId],$conn)){

$this->error(-2,$conn);

falseを返します。   

}

if(!$this->setCharset($charset,$conn)){

$this->error(-3,$conn);

falseを返します。

}

$conn を返します。

}

public function selectDb($dbName,$conn){

if(mysql_select_db($dbName,$conn)){

trueを返します。

}else{

falseを返します。

}

}

パブリック関数 setCharset($charset,$conn){

if(mysql_set_charset($charset,$conn)){

true を返します。

}else{

falseを返します。

}

}

public function addServer($host,$user,$pwd,$dbName,$charset,$linkId){

$this->dbName[$linkId]=$dbName;

$this->link[$linkId]=$this->connect($host,$user,$pwd,$dbName,$charset,$linkId);

}

public function getTrueTable($content,$linkId=0){

switch($this->partition['type']){

case 'mod':

if(!is_int($ content)){

$this->error(-4);

false を返します。

}

$string=$content%$this->partition['rule'];

休憩。

case 'substr':

$string=substr($content,0,$this->partition['rule']);

休憩。

ケース 'md5':

$string=substr(md5($content),0,$this->partition['rule']); $string=null;

$this->trueTableName=$this->tabName . '_'. $ String;

}

// 最初に、判定テーブルが存在し、テーブルのフィールド キャッシュが存在します

// 次に、テーブルを作成し、フィールド キャッシュを返します

$ This - & gt ; Existstable ($ this-& gt; truetableename, $ linkid); {

0 $database=$this->dbName[$linkId]; $sql= 'INFORMATION_SCHEMA' から 'TABLE_NAME' を選択します`.`TABLES` where `TABLE_SCHEMA`=''.$database.'' and `TABLE_NAME`=' '.$tableName.'''

if($this->execute($sql,$linkId); ){

//表存在

if(file_exists('cache/'.md5($this- >tabName).'.php')){

/ /今は書かないままにしておきます、書きます後で

//テーブルはそうではありません存在します

$this ->createTable($this->trueTableName,$linkId);

保護された関数 getFieldCache($link) Id = 0) {

f IF (File_exists ('Cache/ '.MD5 ($ this-> '.PHP') {

= 'cache/' を含めます。'.php';

;query($sql,$linkId) ;

$fields=$this->writeFields($f);

$fields を返します。

}

protected function writeFields($f){

foreach($f as $key=>$value){

$fields[]=$value['フィールド'];

if($value['Key']=='PRI'){

$fields['_pk']=$value['Field'];

}

if($value['Extra']=='auto_increment'){

$fields['_auto']=$value['Field'];

}

}

$string="";

file_put_contents('cache/'.md5($this->tabName).'.php',$string);

$fields を返します。

}

protected function createTable($tabName,$linkId=0){

$sql=str_replace('__TABLENAME__',$this->createSql);

$this->execute($sql,$linkId);

}

//返還结果集我用executeメソッドは必要ありません

public function execute($sql,$linkId=0){

$conn=$this->_link[$linkId];

$result=mysql_query($sql,$this->_link[$linkId]);

if($result&&mysql_affected_rows()){

return mysql_affected_rows();

}else{

falseを返します。

}

}

// 返還结果集我用queryメソッドが必要

public function query($sql,$linkId=0){

$result=mysql_ query($sql,$this->_link[ $linkId]);

if($result&&mysql_affected_rows()){

while($row=mysql_fetch_assoc($result)){

$rows[]=$row;

}

}else{

falseを返します。

}

$rows を返します。

}

public function error($num,$conn){

switch($num){

case -1:

$string='接続データサーバーの損失'.mysql_error($conn);

ケース-3:

4:$

$ string = 'データベースルーティングは、整数ではなく残りを取るように選択されます。 ";

// 最小値を確認する

public function min($field,$linkId=0){

$ sql = "$this->trueTableName から min($field) を選択";];

$ $ row;)){

; ry($ sql、$ linkid);

;

$result=$this->query($sql,$linkId);

$row=$result['re'];

$row を返します。

}

//求总数

public function count($field='',$linkId=0){

if(empty($field)){

$field=$this ->フィールド[ '_pk'];

}

$sql="$this->trueTableName から count($field) を選択";

$result=$this->query($sql,$linkId);

$row=$result['re'];

$row を返します。

}

//

//删除

public function delete($data,$where='',$linkId=0,$order='',$limit=''){

//delete from 表 where 字段 order by 字段制限

if(is_array($data)){

$value=join(',',$data);

}else{

$value=(int)$data;

}

$fields=$this->fields['_pk'];

if(empty($where)){

$sql="$this->trueTableName where $fields in ($value)";

}else{

$where='where '.$where;

if(!empty($order)){

$order='order by '.$order;   

}

if(!empty($limit)){

$limit='limit '.$limit;   

}

$sql="$this->trueTableName $where $order $limit から削除";

}

return $this->execute($sql,$linkId);

}

//

//

修正 public function save($data,$where,$linkId=0,$order='',$limit=''){

// 表セットの字段を更新=值,字段=值 ここで、条件順序制限

$key=array_keys($data);

$newKey=array_intersect($key,$this->fields);

foreach($data as $key=>$value){

if(!in_array($key,$newKey))

続行;

$update.=$key.'="'.$value.'",';

}

$update=rtrim($update,',');

if(!empty($order)){

$order='order by '.$order;

}

if(!empty($limit)){

$limit='limit '.$limit;

}

if(!empty($where)){

$where='where '.$where;

}

$sql="update $this->trueTableName set $update $where $order $limit";

echo $sql;

$result=$this->execute($sql,$linkId);

$result を返します。

}

//增加

public function add($data,$linkId=0){

// 表(字段)の値(值)に挿入

$key=ar ray_keys($data);

$newKey=array_intersect($key,$this->fields);

foreach($data as $key=>$value){

if(!in_array($key,$newKey))

続行;

$values.="'".$value."',";

}

$values=trim($values,',');

$fields=join(',',$newKey);

$sql="$this->trueTableName($fields) の値($values) に挿入";

echo $sql;

$result=$this->execute($sql,$linkId);

$result を返します。

}

//单条查询

public function find($linkId=0,$where='',$order=''){

//select * from table where order limit 1

$field= join(',',$this->fields);

if(!empty($where)){

$where='where '.$where;

}

if(!empty($order)){

$order='order by '.$order;

}

$sql="select $field from $this->trueTableName $where $order limit 1";

$result=$this->query($sql,$linkId);

$result[0] を返します。

}

//多条查询

public function select($field='',$linkId=0,$where='',$order='',$limit=''){

//select * from 表 where order limit

if( empty($field)){

$fields=join(',',$this->fields);

}else{

if(is_array($field)){

$newKey=array_intersect($field,$this->fields);

$fields=implode(',',$newKey);

}else{

$fields=$field;

}

}

if(!empty($where)){

$where='where '.$where;

}

if(!empty($order)){

$order='order by '.$order;

}

if(!empty($limit)){

$limit='limit '.$limit;

}

$sql="select $fields from $this->trueTableName $where $order $limit";

$result=$this->query($sql,$linkId);

$result を返します。

}

//按照字段来查询データセット

function __call($name,$param){

$key=substr($name,0,5);

if(strto lower($key)=='getby'){

$field=strto lower(substr($name,5));

if(!in_array($field,$this->fields)){

falseを返します。

}

$f=join(',',$this->fields);

$value=$param[0];

$sql="select $f from $this->trueTableName where $field='$value'";

$result=$this->query($sql);

$result[0] を返します。

}

}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。