mysql数据库本地化操作
- <?php
- if(!defined('SITE_PATH')){
- define('SITE_PATH',dirname(dirname(__FILE__)));
- }
- $dbconfig=include(SITE_PATH.'/Conf/config.php');
- $database=$dbconfig['DB_NAME'];
- $server=$dbconfig['DB_HOST'];
- $port=$dbconfig['DB_PORT'];
- $user=$dbconfig['DB_USER'];
- $pw=$dbconfig['DB_PWD'];
- $pre=$dbconfig['DB_PREFIX'];
- $conn= mysql_connect($server.':'.$port, $user, $pw);
- //@mysql_query('CREATE DATABASE IF NOT EXISTS `'.$database.'` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci');
- mysql_select_db($database,$conn) or die('select db error');
- $tables=array();
- foreach (glob(SITE_PATH."/db/*.php") as $filename) { //获取文件夹中的路径
- if(basename($filename)!='index.php'&&basename($filename)!='pre.php'){ //排除文件夹中的index.php和pre.php
- $tables[str_replace('.php','',basename($filename))]=include($filename); //将文件内容组装成数组,不带后缀的文件名为key,文件中return的数组内容为value
- }
- }
- $sqls=array();
- foreach($tables as $table=>$db){
- //$table 位数据库表名,$db为字段数组
- $sql=array();
- //根据数组中设置的type类型,转换为数据库字段类型
- // $k 为字段,$v 为字段属性,type,auto,pk等
- foreach($db as $k=>$v){
- if($v['type']=='time'){
- $type='int(10) unsigned';
- }
- elseif($v['type']=='number'){
- $type='int(10)';
- }
- elseif($v['type']=='datetime'){
- $type='datetime';
- }
- elseif($v['type']=='title'){
- $type='varchar(255)';
- }
- elseif($v['type']=='money'){
- $type='decimal(20,2)';
- }
- elseif($v['type']=='mini'){
- $type='tinyint(4)';
- }
- elseif($v['type']=='serialize'){
- $type='text';
- }
- else{
- $type=$v['type'];
- }
- if(isset($v['default'])){
- if($v['default']!=='null'){
- $type=$type.' DEFAULT \''.$v['default'].'\'';
- }
- else{
- $type=$type.' DEFAULT NULL';
- }
- }
- else{
- $type=$type.' DEFAULT NULL';
- }
- if($v['auto']){
- $type=$type.' AUTO_INCREMENT';
- }
- $sql['columns'][$k]='`'.$k.'` '.$type;
- if($v['pk']){
- $sql['key'][$k]='PRIMARY KEY `'.$k.'` (`'.$k.'`)';
- }
- if($v['ukey']){
- $sql['key'][$k]='UNIQUE KEY `'.$k.'` (`'.$k.'`)';
- }
- if($v['key']){
- $sql['key'][$k]='KEY `'.$k.'` (`'.$k.'`)';
- }
- }
- $presql=file_get_contents(SITE_PATH.'/db/sql/sql_'.$pre.$table);
- if($presql){
- $presql=unserialize($presql);
- // 序列化为数据库中字段映射。修改php数组,来影响数据库字段和索引
- // 如果序列化中的字段在PHP数组中没有,则将删除字段语句组装进$sqls[],从而达到修改数组中的字段,来影响数据库中字段的效果
- foreach($presql['columns'] as $k=>$v){
- if(!in_array($v,$sql['columns'])){
- $sqls[]='alter table '.$pre.$table.' drop column '.$k;
- }
- }
- // 如果php数组中的字段不在序列化数组中,则将添加该字段
- foreach($sql['columns'] as $k=>$v){
- if(!in_array($v,$presql['columns'])){
- $sqls[]='alter table '.$pre.$table.' add column '.$v;
- }
- }
- // 如果php数组中的索引在序列化中不存在,则删除索引
- foreach($presql['key'] as $k=>$v){
- if(!in_array($v,$sql['key'])){
- $sqls[]='drop index '.$k.' on '.$pre.$table;
- }
- }
- // 如果序列化中的索引在php数组中不存在,则添加索引
- foreach($sql['key'] as $k=>$v){
- if(!in_array($v,$presql['key'])){
- $sqls[]='alter table '.$pre.$table.' add '.$v;
- }
- }
- }
- else{
- $sqls[$pre.$table]='CREATE TABLE IF NOT EXISTS `'.$pre.$table.'` ('.implode(',',$sql['columns']).','.implode(',',$sql['key']).') ENGINE=InnoDB DEFAULT CHARSET=utf8';
- }
- file_put_contents(SITE_PATH.'/db/sql/sql_'.$pre.$table,serialize($sql));
- }
- foreach($sqls as $k=>$v){
- mysql_query($v,$conn);
- }
- ?>
mysql数据库本地化操作的更多相关文章
- zabbix数据库mariadb从服务器迁移到云mysql数据库的操作
zabbix数据库mariadb从本机迁移到云mysql数据库的操作 1.将zabbix数据库导出,并导入到云数据库中 由于数据库较大,如果直接使用shell会话中断会导致数据库导出或者导入失败,使用 ...
- DBA必备:MySQL数据库常用操作和技巧
DBA必备:MySQL数据库常用操作和技巧 2011-02-25 15:31 kaduo it168 字号:T | T MySQL数据库可以说是DBA们最常见和常用的数据库之一,为了方便大家使用,老M ...
- C语言对mysql数据库的操作
原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎么使用而进行查阅的! 我们言归正 ...
- Database学习 - mysql 数据库 表操作
mysql 数据库 表操作 创建数据表 基本语法格式: 创建数据表: create table 表名( 字段名 datatype 约束, 字段名 datatype 约束, ...... ) 修改表名 ...
- 利用workbench对linux/Ubuntu系统中的mysql数据库进行操作
在上一篇文章中,我分享了在linux中如何安装mysql数据库,但是这只是安装了mysql的服务,并没有图形化管理界面,所以这样子操作起来并没有那么方便,那么现在我们就来实现如何利用在window中安 ...
- Mysql数据库基础操作
Mysql数据库基础操作 在mysql数据库中开启使用tab键补全功能 1)修改主配置文件/etc/mysql/my.cnf(mysql和mariadb目录有些不同) vim /etc/mysql/m ...
- django 中连接mysql数据库的操作步骤
django中连接mysql数据库的操作步骤: 1 settings配置文件中 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mys ...
- MySQL 数据库高级操作 (配图)
MySQL数据库高级操作 1.一键部署mysql 数据库 2.数据表高级操作 3.数据库用户管理 4.数据库用户授权 1.首先一键部署mysql 数据库 : 可以看我之前的博客 https://www ...
- MYSQL数据库的操作
Mysql的连接方式: 1.原生函数:mysql_connect($server,$username,$password); //打开一个到Mysql服务器的连接 mysql_select_db( ...
随机推荐
- HTML 5 History API的”前生今世”
History是有趣的,不是吗?在之前的HTML版本中,我们对浏览历史记录的操作非常有限.我们可以来回使用可以使用的方法,但这就是一切我们能做的了. 但是,利用HTML 5的History API,我 ...
- React Native学习-将 'screen', 'window' or a view生成图片
https://github.com/facebook/react-native/commit/ac12f986899d8520527684438f76299675dc0daa 这是react-nat ...
- jQuery选择器之表单选择器Demo
测试代码: 09-表单选择器.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &quo ...
- 转:关于视频H264编解码的应用实现
转:http://blog.csdn.net/scalerzhangjie/article/details/8273410 项目要用到视频编解码,最近半个月都在搞,说实话真是走了很多弯路,浪费了很多时 ...
- 关于Css选择器优先级
今天练习css的时候,重叠后的style发现不起作用,原来css选择器优先级大有文章. 声明: yi下内容选自 51cto.com --加以自己的理解 以备日后参照使用,毕竟自己理解的才是自己的. ...
- ubuntu启动失败the system is running in low graphics mode
ubuntu启动失败the system is running in lowg raphics mode 起因 ubuntu重新设置selinux的模式 修改配置文件/etc/selinux/conf ...
- WCF之并发,吞吐量和限流
并发 Single重入模式.对于每一个服务实例,同一时刻只能处理一个请求,其他对该实例的请求被排队. PerCall,每一线程会分配一个新的服务实例上.不会有并发性问题.不影响吞吐量. PerSess ...
- linux下开发板网络速度测试记录
由于做的项目对于网络和USB的读写速度有很高的要求,因此新拿回来的板子要测试网络和usb的最佳传输速度.要考虑不少因素,先把我能想到的记录下来. 测试的环境是开发板和ubuntu虚拟机 ...
- JS函数式编程【译】2.1 函数式编程语言
- 网络A、B、C类IP地址的区别
学网络之前得先要明白几个概念:(起初我也不怎么知道后来就慢慢会了) 1字节=8位,1位就是1个数字,所以1字节等于8个数字. 2的8次方,和二进制11111111转换为十进制并不一回事. 0-127是 ...