ホームページ >バックエンド開発 >PHPチュートリアル >Model.class.php
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] を返します。
}
}