MysqlManage.class.php
5.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
<?php
/*
* mysql表结构处理类
* 创建数据表,增加,编辑,删除表中字段
*
*/
class MysqlManage{
/**
* 创建数据库,并且主键是aid
* @param table 要查询的表名
* @param chart InnoDB MyISAM
*/
function createTable($table,$chart='MyISAM'){
$sql="CREATE TABLE IF NOT EXISTS `$table` (`aid` INT NOT NULL primary key)ENGINE = $chart;";
M()->execute($sql);
$this->checkTable($table);
}
/**
* 检测表是否存在,也可以获取表中所有字段的信息
* @param table 要查询的表名
* return 表里所有字段的信息
*/
function checkTable($table){
$sql="desc `$table`";
$info=M()->execute($sql);
return $info;
}
/**
* 检测字段是否存在,也可以获取字段信息(只能是一个字段)
* @param table 表名
* @param field 字段名
*/
function checkField($table,$field){
$sql="desc `$table` $field";
$info=M()->execute($sql);
return $info;
}
/**
* 添加字段
* @param table 表名
* @param info 字段信息数组 array
* info[name] 字段名称
* info[type] 字段类型
* info[length] 字段长度
* info[isNull] 是否为空
* info['default'] 字段默认值
* info['comment'] 字段备注
*/
function addField($table,$info){
$sql="alter table `$table` add column ";
$sql.=$this->filterFieldInfo($info);
M()->execute($sql);
$info=$this->checkField($table,$info['name']);
return $info;
}
/**
* 修改字段
* 不能修改字段名称,只能修改
* @param table 表名
* @param [array] info
* info[name] 字段名称
* info[type] 字段类型
* info[length] 字段长度
* info[isNull] 是否为空
* info['default'] 字段默认值
* info['comment'] 字段备注
*/
function editField($table,$info){
$sql="alter table `$table` modify ";
$sql.=$this->filterFieldInfo($info);
M()->execute($sql);
$this->checkField($table,$info['name']);
}
/**
* 字段信息数组处理,供添加更新字段时候使用
* @param info[name] 字段名称
* @param info[type] 字段类型
* @param info[length] 字段长度
* @param info[isNull] 是否为空 1为空 2不能为空
* @param info[unsigned] unsigned 存在则unsigned
* @param info['default'] 字段默认值
* @param info['comment'] 字段备注
*/
private function filterFieldInfo($info){
if(!is_array($info))
return;
$newInfo=array();
$newInfo['name']=$info['name'];
$newInfo['type']=$info['type'];
switch($info['type']){
case 'varchar':
case 'char':
$newInfo['length']=empty($info['length'])?100:$info['length'];
$newInfo['isNull']=$info['isNull']==1?'NULL':'NOT NULL';
$newInfo['default']=empty($info['default'])?'':'DEFAULT "'.trim($info['default'],'"').'"';
$newInfo['comment']=empty($info['comment'])?'':'COMMENT "'.$info['comment'].'"';
break;
case 'int':
$newInfo['length']=empty($info['length'])?7:$info['length'];
$newInfo['isNull']=$info['isNull']==1?'NULL':'NOT NULL';
$newInfo['unsigned']=empty($info['unsigned'])?'':'unsigned';
$newInfo['default']=(empty($info['default']) && $info['default']!=0)?'':'DEFAULT "'.$info['default'].'"';
$newInfo['comment']=empty($info['comment'])?'':'COMMENT "'.$info['comment'].'"';
break;
case 'tinyint':
$newInfo['length']=empty($info['length'])?4:$info['length'];
$newInfo['isNull']=$info['isNull']==1?'NULL':'NOT NULL';
$newInfo['unsigned']=empty($info['unsigned'])?'':'unsigned';
$newInfo['default']=(empty($info['default']) && $info['default']!=0)?'':'DEFAULT "'.$info['default'].'"';
$newInfo['comment']=empty($info['comment'])?'':'COMMENT "'.$info['comment'].'"';
break;
case 'text':
$newInfo['length']='';
$newInfo['isNull']=$info['isNull']==1?'NULL':'NOT NULL';
$newInfo['default']='';
$newInfo['comment']=empty($info['comment'])?'':'COMMENT "'.$info['comment'].'"';
break;
}
$sql=$newInfo['name']." ".$newInfo['type'];
$sql.=(!empty($newInfo['length']))?'('.$newInfo['length'].')' .' ':' ';
$sql.=$newInfo['isNull'].' ';
if($newInfo['unsigned']) $sql.=$newInfo['unsigned'].' ';
$sql.=$newInfo['default'].' ';
$sql.=$newInfo['comment'];
return $sql;
}
/**
* 删除字段
* 如果返回了字段信息则说明删除失败,返回false,则为删除成功
* @param table 表名
* @param field 字段(单个字段)
*/
function dropField($table,$field){
$sql="alter table `$table` drop column $field";
M()->execute($sql);
$this->checkField($table,$filed);
}
/**
* 获取指定表中指定字段的信息(多字段)
* @param table 表名
* @param field 字段(单个字段或者数组)
*/
function getFieldInfo($table,$field){
$info=array();
if(is_string($field)){
$this->checkField($table,$field);
}else{
foreach($field as $v){
$info[$v]=$this->checkField($table,$v);
}
}
return $info;
}
}