WDCP的V3版本升级phpmyadmin的方法

mikel阅读(1481)

v3版的phpmyadmin连接和访问,做了比较大的调整
不再使用直接在后台的访问方式,而是要使用前端WEB地址来访问
默认的访问地址如 http://ip/pma_xxx
基于安全考虑,xxx为随机生成的字串,在安装时自动生成
文件存放在默认目录/www/web/default下
/www/web/default/pma_d51f5b16
要确保默认首页能访问并且是指向到/www/web/default目录

也可以使用或自定义其它名字,如phpmydb
则在后台的phpmyadmin栏目里设置为phpmydb就可以


还可以使用一个URL地址,如
http://mydomain.com/phpmyadmin
则在后台的phpmyadmin栏目里设置为上面这个地址即可


如果上述的URL地址打不开或是502,请检查/www/web/default目录下有没相应的目录文件

想要升级phpmyadmin

1.直接上传对应版本的phpmyadmin文件夹到/www/web/default/目录下,

2.进入wdcp的后台修改phpmyadmin的文件夹名称为你上传的文件夹名称

wdcp

phpmyadmin升级为4.0.10.10的方法

mikel阅读(1038)

最近有人抱怨wdcp里的phpmyadmin版本太低。。。我也觉得是。。就想办法去升级了下。。成功了。。把我的方法分享给大家

1、首先进入PHPMYADMIN的官网

  1. https://www.phpmyadmin.net/downloads/

复制代码

2、找到4.0.10.10的下载地址,因目前WDCP的数据库是5.1版的,所能支持的最新版本的phpmyadmin是4.0.10.10。
(https://files.phpmyadmin.net/phpMyAdmin/4.0.10.10/phpMyAdmin-4.0.10.10-all-languages.tar.gz)

3、在SecureCRT里进入 /www/wdlinux/wdcp/

  1. cd /www/wdlinux/wdcp/

复制代码

4、用wget命令下载,(在wdcp面板里、此路径下是不能看到phpmyadmin文件夹的。一定要在ssh里)

  1. wget https://files.phpmyadmin.net/phpMyAdmin/4.0.10.10/phpMyAdmin-4.0.10.10-all-languages.tar.gz

复制代码

6、tar解压

  1. tar zxvf phpMyAdmin-4.0.10.10-all-languages.tar.gz

复制代码

5、将文件phpMyAdmin-4.0.10.10-all-languages.tar.gz 改名为phpmyadmin4.tar.gz(mv命令)

  1. mv phpMyAdmin-4.0.10.10-all-languages phpmyadmin4

复制代码

7、将目录 phpmyadmin里的配置文件 config.sample.inc.php 复制到目录phpMyAdmin4里(cp命令)

  1. cp /phpmyadmin/config.sample.inc.php /phpmyadmin4/config.sample.inc.php

复制代码

8、在WDCP后台将PHPMYADMIN的路径改为phpmyadmin4
QQ截图20150813144530.png

9、旧版本的phpMyAdmin可以删除了

  1. rm -rf phpmyadmin

复制代码

MySql错误处理(三)- 错误处理的例子 - 风生水起 - 博客园

mikel阅读(1114)

来源: MySql错误处理(三)- 错误处理的例子 – 风生水起 – 博客园

有几种错误处理的声明形式:
§ 如果任何错误(不是 NOT FOUND ) , 设置 l_error 为 1 后继续执行:
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
SET l_error=1;
§ 如果发生任何错误(不是 NOT FOUND), 执行 ROLLBACK和产生一条错误消息后退出当前块或存储过程。
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
SELECT ‘Error occurred – terminating’;
END;
§ 如果 MySQL 1062错误 (重复的健值 )发生,执行 SELECT语句(向调用程序发一条消息)后继续执行
DECLARE CONTINUE HANDER FOR 1062
SELECT ‘Duplicate key in index’;
§ 如果 SQLSTATE 2300错误 (重复的健值 )发生,执行 SELECT语句(向调用程序发一条消息)后继续执行
DECLARE CONTINUE HANDER FOR SQLSTATE ‘23000’
SELECT ‘Duplicate key in index’;
§ 当游标或者 SQL 选择语句没有返回值时,设置 l_done=1 后继续执行
DECLARE CONTINUE HANDLER FOR NOT
FOUND
SET l_done=1;
§ 此例除了用 SQLSTATE 变量而不是命名条件以外,跟前一个例子一样
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000 ‘
SET l_done=1;
§ 此例除了用 MySQL 的错误码变量而不是命名条件或者 SQLSTATE 变量以外,跟前两个例子一样
DECLARE CONTINUE HANDLER FOR 1329
SET l_done=1;

MYSQL--事务处理 - Falling Leaves - 博客园

mikel阅读(1013)

来源: MYSQL–事务处理 – Falling Leaves – 博客园

事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
删除的SQL语句
delete from userinfo where ~~~
delete from mail where ~~
delete from article where~~
~~
如果没有事务处理,在你删除的过程中,假设出错了,只执行了第一句,那么其后果是难以想象的!
但用事务处理。如果删除出错,你只要rollback就可以取消删除操作(其实是只要你没有commit你就没有确实的执行该删除操作)

一般来说,在商务级的应用中,都必须考虑事务处理的!

查看inodb信息
shell> /usr/local/mySQL -u root -p
mySQL> show variables like “have_%”
系统会提示:
+——————+——-+
| Variable_name     | Value |
+——————+——-+
| have_bdb          | YES    |
| have_crypt        | YES    |
| have_innodb       | YES    |
| have_isam         | YES    |
| have_raid         | YES    |
| have_symlink      | YES    |
| have_openssl      | NO     |
| have_query_cache | YES    |
+——————+——-+
8 rows in set (0.05 sec)
如果是这样的,那么我们就可以创建一张支持事务处理的表来试试了。

MYSQL的事务处理功能!

作者:Feifengxlq   Email:feifengxlq@sohu.com
一直以来我都以为MYSQL不支持事务处理,所以在处理多个数据表的数据时,一直都很麻烦(我是不得不将其写入文本文件,在系统重新加载得时候才写入数据库以防出错)~今天发现MYSQL数据库从4.1就开始支持事务功能,据说5.0将引入存储过程^_^
先简单介绍一下事务吧!事务是DBMS得执行单位。它由有限得数据库操作序列组成得。但不是任意得数据库操作序列都能成为事务。一般来说,事务是必须满足4个条件(ACID)
原子性(Autmic):事务在执行性,要做到“要么不做,要么全做!”,就是说不允许事务部分得执行。即使因为故障而使事务不能完成,在rollback时也要消除对数据库得影响!
一致性(Consistency):事务得操作应该使使数据库从一个一致状态转变倒另一个一致得状态!就拿网上购物来说吧,你只有即让商品出库,又让商品进入顾客得购物篮才能构成事务!
隔离性(Isolation):如果多个事务并发执行,应象各个事务独立执行一样!
持久性(Durability):一个成功执行得事务对数据库得作用是持久得,即使数据库应故障出错,也应该能够恢复!

MYSQL的事务处理主要有两种方法。
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit  事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
set autocommit=0   禁止自动提交
set autocommit=1 开启自动提交
来实现事务的处理。
但注意当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了个新的事务!按第一种方法只将当前的作为一个事务!
个人推荐使用第一种方法!
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!(切记!)

下次有空说下MYSQL的数据表的锁定和解锁!

MYSQL5.0 WINXP下测试通过~   ^_^

mysql> use test;
Database changed
mysql> CREATE TABLE `dbtest`(
-> id int(4)
-> ) TYPE=INNODB;
Query OK, 0 rows affected, 1 warning (0.05 sec)

mysql> select * from dbtest
-> ;
Empty set (0.01 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into dbtest value(5);
Query OK, 1 row affected (0.00 sec)

mysql> insert into dbtest value(6);
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from dbtest;
+——+
| id    |
+——+
|     5 |
|     6 |
+——+
2 rows in set (0.00 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into dbtest values(7);
Query OK, 1 row affected (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from dbtest;
+——+
| id    |
+——+
|     5 |
|     6 |
+——+
2 rows in set (0.00 sec)

mysql>

*******************************************************************************************************************

[PHP]
function Tran( $sql ) {
$judge = 1;
mysql_query(‘begin’);
foreach ($sql as $v) {
if ( !mysql_query($v) ) {
$judge = 0;
}
}
if ($judge == 0) {
mysql_query(‘rollback’);
return false;
}
elseif ($judge == 1) {
mysql_query(‘commit’);
return true;
}
}
[/PHP]

************************************************

<?php
$handler=mysql_connect(“localhost”,”root”,””);
mysql_select_db(“task”);
mysql_query(“SET AUTOCOMMIT=0”);//设置为不自动提交,因为MYSQL默认立即执行
mysql_query(“BEGIN”);//开始事务定义
if(!mysql_query(“insert into trans (id) values(‘2’)”))
{
mysql_query(“ROOLBACK”);//判断当执行失败时回滚
}
if(!mysql_query(“insert into trans (id) values(‘4’)”))
{
mysql_query(“ROOLBACK”);//判断执行失败回滚
}
mysql_query(“COMMIT”);//执行事务
mysql_close($handler);
?>

查询mysql总结和预处理 - 刘高静的专栏 - 博客频道 - CSDN.NET

mikel阅读(971)

New document.nbsp; <!– $(document.quot;).ready(function(){ $(#btn1).click(function(){ $([name=’checkbox’]).attr(checked,’true’);//

来源: 查询mysql总结和预处理 – 刘高静的专栏 – 博客频道 – CSDN.NET

一、连接到MySQL:

$dbc = mySQLi_connect(host,user,password,databasename);
等价于:
$dbc = mySQLi_connect(host,user,pwd);
mysqli_select_db($dbc,db_name);

如果发生错误,可以调用:mysqli_connect_error() 返回错误信息,不带参数。
$dbc = @mysqli_connect(host,user,pwd,db) or die(‘无法连接到mysql:’.mysqli_connect_error());

@是错误控制运算符,防止在web浏览器显示php错误。此外,@也可以放在mysqli_query前面。上面是一种首选做法,因为错误将由or die处理。die()会终止脚本执行。

可以将连接文件放在路径外。

设置编码:mysqli_query(“set names gb2312”);

二、执行查询:
不管是select, delete, update,insert 查询都是用:
$result=mysqli_query($dbc,SQL);
对于insert ,delete,update等查询不会返回结果,$result将返回true或false,因此可以用这个来判断下一步:
$result = mysqli_query($dbc,sql);
if($result) {//susses}

如果查询没有成功,必定发生某种mysql错误,可能调用
mysqli_error($dbc)    //注意和mysqli_connect_error()区别

三、关闭连接:
mysqli_close($dbc) 这不是必需要的,php会在脚本最后自动关闭,但最好写上。

四、多条查询:
mysqli_multi_query() 允许同时执行多条查询。但语法更复杂一点。特别是当返回结果时。

五、检索select查询结果:
mysqli_fetch_array($result [, type]) 是最常用的,以数组格式一次返回一行数据。由它来配合while() 来遍历返回数据。带有一个可选参数type,用于指定返回的数组类型:关联的还是索引的,或二者均可。参数类型如下:
MYSQLI_ASSOC    示例:$rows[‘columnName’]
MYSQLI_NUM 示例:$rows[0] ,这一种效率较高一点。
MYSQLI_BOTH 示例:$rows[0]或$rows[‘columnName’]

当使用mysqli_fetch_array($result [, type]) 后,可以采取一个可选步聚的是:一旦查询结果完成了工作,即可释放这些信息,来消除$result占用的系统内存开销。这一步是可选的,PHP同样也在会结果时自动清理:
mysqli_free_result($result)    //注意参数是不是$rows!
流程如下:
while($rows=mysqli_fetch_array($result))   //或while($rows=mysqli_fetch_array($result,MYSQLI_ASSOC))
{//遍历
…….code do something…….
echo $rows[0]
mysqli_free_result($result)
}
注意:
mysqli_fetch_array()和mysqli_fetch_array($result,MYSQLI_NUM)等价。
mysqli_fetch_assoc()和mysqli_fetch_array($result,MYSQLI_ASSOC)等价。

六、确保sql安全,使用转义函数:
mysqli_real_escape_string($dbc,para)
该函数接收字符串作为参数,用于检验用户提交的并将组合到sql查询语句的变量值,它将转义那些有可能无意或带恶意的字符。如单引号,在外国人的姓名有可能会包含该符号(如O’Toole),这时就需要用它。
案例:
$name = $_POST[‘name’];
$name = mysqli_real_escape_string($dbc,$name);
$query = “Select … From tb where name=’$name'”; //这样可以确保带入sql 时参数的安全。
注意:如果在使用php6之前的版本,若启用MAGIC QUOTES魔法引用时,那么在使用mysqli_real_escape_string前,需要用stripslashes(para)删除魔法引用添加的任何斜杠,如下:
$fn = mysqli_real_escape_string($dbc,trim(stripslashes($_POST[‘firstName’])));

 

备注:

在PHP5.3版本之前, mysqli_real_escape_string()函数存在路径泄漏问题,远程攻击者可以利用漏洞获得服务器端脚本的实际路径。即如果传递的参数值 为数组而不是字符串的情况下会发出警告,警告消息中会包含有当前服务端运行脚本的完整路径信息。
测试方法:
http://localhost/cms/sqlfilter/sqlsanatizer.php?params []=
Warning: mysqli_real_escape_string() expects parameter 1 to be string,
array given in /var/www/vhosts/cms/sqlfilter/sqlsanatizer.php

七、统计select返回的记录数:

使用mysqli_num_rows($result)统计select 返回的结果行数。$num=mysqli_num_rows($r),对于上面所说的while流程,可以更改成以下更严谨的写法,而不只是分析查询是否成功,因为如果数据库为空的话,就不会出错。
$sql = “select * from tb where id=$id”;
$r = @mysqli_query($dbc,$sql);
$num = mysqli_num_rows($r);
if($num>0){ //这样比if($r)更准确。不是仅仅分析是否成功运行。
// Do something;

mysqli_free_result($r)
}
mysqli_close($dbc);

八、返回insert ,update,delete受影响行数:
和上面不同的是,如果查询不是select则用mysqli_affected_rows()函数返回受影响行数。用法如下:
$num = mysqli_affected_rows($dbc); //注意参数是$dbc;
如:
$q = “update tb set pass=SHA1(‘$newpassword’) where id=$row[0]”;
$r = @myslqi_query($dbc,$q);
if(mysqli_affected_rows($dbc)==1){
//Do something
}else{
echo mysqli_error($dbc);
exit(); //终止脚本。
}
注意:
1、如果使用truncate tb清空表时,则mysqli_affected_rows()会返回0,即使查询成功执行并且删除了每一行。
2、如果用update查询时,但实质上没有更改任何列的值,比如用相同的密码代替一个旧密码,则也会返回0。

九、批量查询:预处理语句(第12章第4节:P311)
版本:MYSQL 4.1开始添加预处理。php5可以使用。
预处理的好处:
1、更大安全性。2、更好性能。3、批量查询。

对于预处理语句,只会把查询本身发送给mysql,并且只会解析一次,然后单独把值发送给mysql。
$q = ‘Insert into tb(num) values (?)’;
$stmt = mysqli_prepare($dbc,$q);
mysqli_stmt_bind_param($stmt,’i’,$n);
for($n=1;$n<=100;$n++)
{
mysqli_stmt_execute($stmt);
}
可以通过insert , update , delete , select 查询创建预处理,步骤:
1、定义查询:
$q = “select firstname,lastname from users where uid = ?”;   //(正常则是uid=$id)
2、将查询传给mysql预处理:
$stmt = mysqli_prepare($dbc,$q);   //此时mysql会解析查询,但不会执行。
3、将变量绑定到查询占位符”?”,如下:
mysqli_stmt_bind_param($stmt,’i’,$id);
其中’i’的含义是mysql_stmt_bind_param函数期望接收到的值为int类型,共有以下几种:
——————————————————————————–
字母                    表示绑定的值类型
d                             Decimal
i                               Integer
b                              Blob (二进制类型)
s                               所有其它类型
———————————————————————————-
如果查询语句有多个变量,如:
$q = “select uid,firstname from users where email=? AND pass=SHA1(?)”; //注意这里都没有对?问号加单引号,即使是字符型。这是和标准查询的区别。
多个变量直接在绑定时按顺序在引号内列出即可。如下:
$stmt = mysqli_prepare($dbc,$q);
mysqli_stmt_bind_param($stmt,’ss’,$e,$p);
还需要注意的时,在调用绑定函数前,可以不需要先对变量定义设置,如上面的$e,$p在下面才设置,这不会出错。
4、完成绑定后,可以给php变量赋值(如果还没有值的话)。然后执行语句。
$id=15;
mysqli_stmt_execute($stmt);
5、关闭预处理:
mysqli_stmt_close($stmt);
6、关闭连接
mysqli_close($dbc);
执行预处理时,如有出错则用mysqli_stmt_error($stmt)调用。

示例:
$dbc =mysqli_connect(‘localhost’,’username’,’pwd’,’forum’);
$q = ‘insert into messages(forumid,parentid,userid,subject,body,forumdate) values(?,?,?,?,?,NOW())’;
$stmt = mysqli_prepare($dbc,$q);
mysqli_stmt_bind_param($stmt,’iiiss’,$forumid,$parentid,$userid,$subject,$body);
$forumid = (int)$_POST[‘forumid’];
$parentid=(int) $_POST[‘parentid’];
$user_id =3;
$subject = strip_tags($_POST[‘subject’]); //strip_tags
$body = strip_tags($_POST[‘body’]);
mysqli_stmt_execute($stmt);
if(mysqli_stmt_affected_rows($stmt)==1)
{
//do ….
}else{
echo mysqli_stmt_error($stmt);
}
mysqli_stmt_close($stmt);
mysqli_close($dbc);

以上演示了预处理的一种语句,实际上预处理有两种语句:
1、绑定参数(bound parameter):如上面的示例
2、绑定结果(bound result):将查询结果绑定到php变量。

十、阻止sql注入:(第12章第4节:P311)
1、验证在查询中要使用的数据,如果有可能,就可执行类型强制转换。如:
$forumid = (int)$_POST[‘forumid’];
if($forumid>0) ….   //如果强制转换成int完=0时,则不符数据型要求。
2、使用mysqli_real_escape_string($dbc,para)
3、使用mysqli_real_escape_string($dbc,para)替代办法:预处理,参上面。

十一、早先的php和mysql连接方式:
mysql_connect,在写法上只差上面一个字母i,但用法差不多。以下简单示例:
$conn = mysql_connect(“127.0.0.1″,”mysqltest”,”123456″);
mysql_select_db(“shop”); //如果用$selectdb = mysql_select_db(“shop”);则$selectdb=1

mysql_query(“set names gb2312”); //mysql_query(“set names utf8″);
$exec=”select * from product”;
$result=mysql_query($exec,$conn); //或:$result=mysql_query($exec);

while($rs=mysql_fetch_object($result))
{
echo “品名:[“.$rs->pname . “] &nbsp;&nbsp;”;
echo “价格:”.
$rs->price . “&nbsp;&nbsp;”;
echo “入库时间:”.$rs->addTime . “&nbsp;&nbsp;”;
echo “<br />”;
}
echo $result;

如果要进行结果判断有无再输出,则可以用:
$conn = mysql_connect(“127.0.0.1″,”mysqltest”,”123456″);
mysql_select_db(“shop”);

mysql_query(“set names gb2312”); //mysql_query(“set names utf8″);
$exec=”select * from product”;
if($result=mysql_query($exec,$conn)){
while($rs=mysql_fetch_object($result))
{
echo “品名:[“.$rs->pname . “] &nbsp;&nbsp;”;
echo “价格:”.
$rs->price . “&nbsp;&nbsp;”;
echo “入库时间:”.$rs->addTime . “&nbsp;&nbsp;”;
echo “<br />”;
}
}

附:
A、在insert后取得最后一条记录:2种方法:
1、使用mysql的:last_insert_id() 函数。“insert into ….;select last_insert_id()”
2、使用php 的 mysql_insert_id() 或mysqli_insert_id() 返回同样的值:
PHP的 mysql_insert_id ( [resource $link_identifier] ) 函数可以返回你需要的ID。 可选参数是php连接mysql的句柄。 每个连接都有不同的句柄。如:
mysql_query(“INSERT INTO mytable (product) values (‘kossu’)”);
printf (“Last inserted record has id %d\n”, mysql_insert_id());

B、几个函数:
trim() , ltrim(), rtrim()
exit(),
strip_tags()去掉字符串中包含的任何 HTML 及 PHP 的标记字符串。若是字符串的 HTML 及 PHP 标签原来就有错,例如少了大于的符号,则也会返回错误。而本函数和 fgetss() 有着相同的功能。
$text = ‘<p>Test paragraph.</p><!– Comment –> <a href=”#fragment”>Other text</a>’;
echo strip_tags($text); //结果:Test paragraph. Other text
// 许可用 <p> and <a>
echo strip_tags($text, ‘<p><a>’); //结果:<p>Test paragraph.</p> <a href=”#fragment”>Other text</a>

mysql事务处理用法与实例详解 - 网名还没想好 - 博客园

mikel阅读(1007)

来源: mysql事务处理用法与实例详解 – 网名还没想好 – 博客园

 来源:转载

 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID事务、行级锁、并发 3.Berkeley DB:支持事务
 一个事务是一个连续的一组数据库操作,就好像它是一个单一的工作单元进行。换言之,永远不会是完整的事务,除非该组内的每个单独的操作是成功的。如果在事务的任何操作失败,则整个事务将失败。

实际上,会俱乐部许多SQL查询到一个组中,将执行所有的人都一起作为事务的一部分。

事务的特性:
事务有以下四个标准属性的缩写ACID,通常被称为:

原子性: 确保工作单元内的所有操作都成功完成,否则事务将被中止在故障点,和以前的操作将回滚到以前的状态。

一致性: 确保数据库正确地改变状态后,成功提交的事务。

隔离性: 使事务操作彼此独立的和透明的。

持久性: 确保提交的事务的结果或效果的系统出现故障的情况下仍然存在。

在MySQL中,事务开始使用COMMIT或ROLLBACK语句开始工作和结束。开始和结束语句的SQL命令之间形成了大量的事务。

COMMIT & ROLLBACK:
这两个关键字提交和回滚主要用于MySQL的事务。

当一个成功的事务完成后,发出COMMIT命令应使所有参与表的更改才会生效。

如果发生故障时,应发出一个ROLLBACK命令返回的事务中引用的每一个表到以前的状态。

可以控制的事务行为称为AUTOCOMMIT设置会话变量。如果AUTOCOMMIT设置为1(默认值),然后每一个SQL语句(在事务与否)被认 为是一个完整的事务,并承诺在默认情况下,当它完成。 AUTOCOMMIT设置为0时,发出SET AUTOCOMMIT =0命令,在随后的一系列语句的作用就像一个事务,直到一个明确的COMMIT语句时,没有活动的提交。

可以通过使用mysql_query()函数在PHP中执行这些SQL命令。

通用事务例子
这一系列事件是独立于所使用的编程语言,可以建立在任何使用的语言来创建应用程序的逻辑路径。
可以通过使用mysql_query()函数在PHP中执行这些SQL命令。
BEGIN WORK开始事务发出SQL命令

发出一个或多个SQL命令,如SELECT,INSERT,UPDATE或DELETE

检查是否有任何错误,一切都依据的需要。

如果有任何错误,那么问题ROLLBACK命令,否则发出COMMIT命令。

在MySQL中的事务安全表类型:

如果打算使用MySQL事务编程,那么就需要一种特殊的方式创建表。有很多支持事务但最流行的是InnoDB表类型。

从源代码编译MySQL时,InnoDB表支持需要特定的编译参数。如果MySQL版本没有InnoDB支持,请互联网服务提供商建立一个版本的 MySQL支持InnoDB表类型,或者下载并安装Windows或Linux/UNIX的MySQL-Max二进制分发和使用的表类型在开发环境中。
如果MySQL安装支持InnoDB表,只需添加一个的TYPE=InnoDB 定义表创建语句。例如,下面的代码创建InnoDB表tcount_tbl:

 

 代码如下 复制代码
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tcount_tbl
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count  INT
-> ) TYPE=InnoDB;
Query OK, 0 rows affected (0.05 sec)

可以使用其他GEMINI或BDB表类型,但它取决于您的安装,如果它支持这两种类型。
由于项目设计里面,牵扯到了金钱的转移,于是就要用到MYSQL的事务处理,来保证一组处理结果的正确性。用了事务,就不可避免的要牺牲一部分速度,来保证数据的正确性。
只有InnoDB支持事务

事务 ACID Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

1、事务的原子性
一组事务,要么成功;要么撤回。

2、稳定性
有非法数据(外键约束之类),事务撤回。

3、隔离性
事务独立运行。
一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。
事务的100%隔离,需要牺牲速度。

4、可靠性
软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。
可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候吧事务保存到日志里。
开启事务
START TRANSACTION 或 BEGIN

提交事务(关闭事务)
COMMIT

放弃事务(关闭事务)
ROLLBACK

折返点
SAVEPOINT adqoo_1
ROLLBACK TO SAVEPOINT adqoo_1
发生在折返点 adqoo_1 之前的事务被提交,之后的被忽略

事务的终止

设置“自动提交”模式
SET AUTOCOMMIT = 0
每条SQL都是同一个事务的不同命令,之间由 COMMIT 或 ROLLBACK隔开
掉线后,没有 COMMIT 的事务都被放弃

事务锁定模式

系统默认: 不需要等待某事务结束,可直接查询到结果,但不能再进行修改、删除。
缺点:查询到的结果,可能是已经过期的。
优点:不需要等待某事务结束,可直接查询到结果。

需要用以下模式来设定锁定模式

1、SELECT …… LOCK IN SHARE MODE(共享锁)
查询到的数据,就是数据库在这一时刻的数据(其他已commit事务的结果,已经反应到这里了)
SELECT 必须等待,某个事务结束后才能执行

2、SELECT …… FOR UPDATE(排它锁)
例如 SELECT * FROM tablename WHERE id<200
那么id<200的数据,被查询到的数据,都将不能再进行修改、删除、SELECT …… LOCK IN SHARE MODE操作
一直到此事务结束

共享锁 和 排它锁 的区别:在于是否阻断其他客户发出的 SELECT …… LOCK IN SHARE MODE命令

3、INSERT / UPDATE / DELETE
所有关联数据都会被锁定,加上排它锁

4、防插入锁
例如 SELECT * FROM tablename WHERE id>200
那么id>200的记录无法被插入

5、死锁
自动识别死锁
先进来的进程被执行,后来的进程收到出错消息,并按ROLLBACK方式回滚
innodb_lock_wait_timeout = n 来设置最长等待时间,默认是50秒

事务隔离模式

SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL
READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE
1、不带SESSION、GLOBAL的SET命令
只对下一个事务有效
2、SET SESSION
为当前会话设置隔离模式
3、SET GLOBAL
为以后新建的所有MYSQL连接设置隔离模式(当前连接不包括在内)

隔离模式

READ UNCOMMITTED
不隔离SELECT
其他事务未完成的修改(未COMMIT),其结果也考虑在内

READ COMMITTED
把其他事务的 COMMIT 修改考虑在内
同一个事务中,同一 SELECT 可能返回不同结果

REPEATABLE READ(默认)
不把其他事务的修改考虑在内,无论其他事务是否用COMMIT命令提交过
同一个事务中,同一 SELECT 返回同一结果(前提是本事务,不修改)

SERIALIZABLE
和REPEATABLE READ类似,给所有的SELECT都加上了 共享锁

出错处理
根据出错信息,执行相应的处理
mysql事物处理实例

MYSQL的事务处理主要有两种方法
1.用begin,rollback,commit来实现
begin开始一个事务
rollback事务回滚
commit 事务确认
2.直接用set来改变mysql的自动提交模式
mysql默认是自动提交的,也就是你提交一个query,就直接执行!可以通过
set autocommit = 0 禁止自动提交
set autocommit = 1 开启自动提交
来实现事务的处理。
但要注意当用set autocommit = 0 的时候,你以后所有的sql都将作为事务处理,直到你用commit确认或 rollback结束,注意当你结束这个事务的同时也开启了新的事务!按第一种方法只将当前的做为一个事务!
MYSQL只有 INNODB和BDB类型的数据表才支持事务处理,其他的类型是不支持的!
MYSQL5.0 WINXP下测试通过~  ^_^

 代码如下 复制代码
    mysql> use test;
Database changed
mysql> CREATE TABLE `dbtest`(
-> id int(4)
-> ) TYPE=INNODB;
Query OK, 0 rows affected, 1 warning (0.05 sec)

mysql> select * from dbtest
-> ;
Empty set (0.01 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into dbtest values(5);
Query OK, 1 row affected (0.00 sec)

mysql> insert into dbtest value(6);
Query OK, 1 row affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from dbtest;
+——+
| id   |
+——+
|    5 |
|    6 |
+——+
2 rows in set (0.00 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into dbtest values(7);
Query OK, 1 row affected (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from dbtest;
+——+
| id   |
+——+
|    5 |
|    6 |
+——+
2 rows in set (0.00 sec)

mysql> mysql事务处理

php代码实现事务的处理可以通过PHP预定义类mysqli的以下方法实现。
autocommit(boolean):该方法用于限定查询结果是否自动提交,如果该方法的参数为true则自动提交,如果参数为false则关闭自动提交。MySQL数据库默认为自动提交。
rollback():利用mysqli类中的该方法可以实现事务的回滚。
commit():利用该方法可以实现提交所有查询。

 代码如下 复制代码
<?php
include_once(“conn.php”);

$id=$_GET[id];
$conn->autocommit(false);
if(!$conn->query(“delete from tb_sco where id='”.$id.”‘”))
{
$conn->rollback();
}
if(!$conn->query(“delete from tb_stu where id='”.$id.”‘”))
{
$conn->rollback();
}
$conn->commit();
$conn->autocommit(true);
echo “ok”
?>

列二

 代码如下 复制代码
<?php
require(‘connectDB.php’); //建立数据库连接
mssql_query(“BEGIN TRANSACTION DEPS02_DEL”); //开始事务
$delete_dep_sql=”DELETE FROM TBLDEPARTMENT WHERE DEPTID='{$_GET[deptid]}'”;
// echo $delete_dep_sql.”<br>”;
mssql_query($delete_dep_sql); //操作数据库
// var_dump($del_result);
$delete_result = mssql_query(“select @@ROWCOUNT as id”);
$delete_info = mssql_fetch_array($delete_result);
$delete_rows = $delete_info[0];
// var_dump($delete_rows);
mssql_free_result($delete_result);
echo “<script language=javascript>”;
if(true){    //判断是否回滚提交
mssql_query(“COMMIT TRANSACTION DEPS02_DEL”); //提交事务
echo “alert(‘delete success!’);”;
}else{
mssql_query(“ROLLBACK TRANSACTION DEPS02_DEL”); //回滚事务
echo “alert(‘delete faile!’);”;
}
echo “</script>”;mssql_close();
?>

例3

MySQL的事务处理在处理实际问题中有着广泛且重要的应用,最常见的应用如银行转账业务、电子商务支付业务等等。但是,值得注意的是,MySQL的事务 处理功能在MYSIAM存储引擎中是不支持的,在InnoDB存储引擎中是支持的。现在上传一段代码,作为引导认识MySQL事务处理的开始,简单的实 例,但融汇思想,相信会有很大的帮助。

 代码如下 复制代码
<?php
$conn=mysql_connect(‘localhost’,’root’,’yourpassword’)or die(mysql_error());
mysql_select_db(‘transaction’,$conn);
mysql_query(‘set names utf8’);

//创建事务
mysql_query(‘START TRANSACTION’) or die(mysql_error());
$sqlA=”update A set account=account-1″;
if(!mysql_query($sqlA)){
&nbsp;&nbsp;&nbsp; mysql_query(‘ROLLBACK’) or exit(mysql_error());//判断当执行失败时回滚
&nbsp;   exit();
}
$sqlB=”update B set account=account+1″;
if(!mysql_query($sqlB)){
&nbsp;&nbsp;&nbsp; mysql_query(‘ROLLBACK’) or exit(mysql_error());//判断当执行失败时回滚
&nbsp;   exit();
}
mysql_query(‘COMMIT’)or die(mysql_error());//执行事务
mysql_close($conn);
?>

以上代码可以作为模拟银行转账业务的事务流程。以表A、B分别表示两个已在银行开户的账户,当账户A执行转出1元给账户B的操作时,如果操作执行失败,转 出将会回滚至原始状态,不继续向下执行动作。反之,如果操作执行成功,则账户B可用余额将增加1元,否则事务回滚至原始状态。

PHP定时执行的三种方式实现

mikel阅读(1050)

摘要:PHP不支持多线程,有时候处理问题不是那么爽,今天谈论一下PHP定时执行的方法

PHP定时执行的三种方式实现

1、windows 的计划任务
2、linux的脚本程序
3、让web浏览器定时刷新

 

具体实现

windows计划任务

PHP很少在win服务器上跑,具体实现也不再深究,看网上实现的原理大概是写bat脚本,然后让window任务添加执行这个bat脚本,具体可以参考:http://www.cnblogs.com/whoknows/articles/2228577.html

linux 的脚本实现

这里主要使用到crontab这个命令,

使用方式 :

crontab   filecrontab [ -u user ] [ -u user ] { -l | -r | -e }

说明 :

crontab 是用来让使用者在固定时间或固定间隔执行程式之用

使用crontab写shell脚本,然后让PHP调用shell,这个是利用linux的特性,应该还不算PHP自身语言的特性

可以参看:http://www.centos.bz/2011/07/php-cron-job-linux-crontab/

PHP实现定时执行计划任务

 

php

使用php让浏览器刷新需要解决几个问题

  1. PHP脚本执行时间限制,默认的是30m 解决办法:set_time_limit();或者修改PHP.ini 设置max_execution_time时间(不推荐)
  2. 如果客户端浏览器关闭,程序可能就被迫终止,解决办法:ignore_user_abort即使关闭页面依然正常执行
  3. 如果程序一直执行很有可能会消耗大量的资源,解决办法使用sleep使用程序休眠一会,然后在执行

PHP定时执行的代码:

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
<?php
ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(3000);// 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=5;// 每隔5s运行
//方法1--死循环
do{
    echo '测试'.time().'<br/>';
    sleep($interval);// 等待5s   
}while(true);
//方法2---sleep 定时执行
    require_once './curlClass.php';//引入文件
    
    $curl = new httpCurl();//实例化
    $stime = $curl->getmicrotime();
    for($i=0;$i<=10;$i++){
        
        echo '测试'.time().'<br/>';
        sleep($interval);// 等待5s
        
    }
    ob_flush();
    flush();
    $etime = $curl->getmicrotime();
    echo '<hr>';
    echo round(($etime-stime),4);//程序执行时间
1
 

测试的时候发现这个效率并不是很高,

QQ截图20111216110444

总结:

个人感觉PHP定时执行任务的效率不是很高,建议关于定时执行任务的工作还是交给shell来做吧,比较那才是王道。

ps:那个死循环的方法好像是恶意攻击网站经常使用的方法

微擎系统表结构以及数据关系说明

mikel阅读(2253)

来源: dev:v0.6:dd – 微擎指导手册

Database: `we7_pro`

书写 SQL 语句时一定要注意规范, 不要加不必要的空格, Tab 等, “;” 结尾直接换行.

数据表图例

数据字典

核心 SQL

-- phpMyAdmin SQL Dump
-- version 4.1.6
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: 2015-01-27 11:00:31
-- 服务器版本: 5.5.39
-- PHP Version: 5.4.31
 
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
 
--
-- Database: `we7_pro`
--
 
--
-- 表的结构 `ims_account`
--
 
CREATE TABLE IF NOT EXISTS `ims_account` (
  `acid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `hash` VARCHAR(8) NOT NULL,
  `type` tinyint(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '1为微信,2为易信',
  `isconnect` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`acid`),
  KEY `idx_uniacid` (`uniacid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=437 ;
 
--
-- 表的结构 `ims_account_wechats`
--
 
CREATE TABLE IF NOT EXISTS `ims_account_wechats` (
  `acid` INT(10) UNSIGNED NOT NULL,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `token` VARCHAR(32) NOT NULL COMMENT '随机生成密钥',
  `encodingaeskey` VARCHAR(43) NOT NULL,
  `access_token` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '存取凭证结构',
  `jsapi_ticket` VARCHAR(1000) NOT NULL,
  `level` tinyint(4) UNSIGNED NOT NULL DEFAULT '0' COMMENT '接口权限级别, 0 普通订阅号, 1 认证订阅号|普通服务号, 2认证服务号',
  `name` VARCHAR(30) NOT NULL COMMENT '公众号名称',
  `account` VARCHAR(30) NOT NULL COMMENT '微信帐号',
  `original` VARCHAR(50) NOT NULL,
  `signature` VARCHAR(100) NOT NULL COMMENT '功能介绍',
  `country` VARCHAR(10) NOT NULL,
  `province` VARCHAR(3) NOT NULL,
  `city` VARCHAR(15) NOT NULL,
  `username` VARCHAR(30) NOT NULL,
  `password` VARCHAR(32) NOT NULL,
  `lastupdate` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `key` VARCHAR(50) NOT NULL,
  `secret` VARCHAR(50) NOT NULL,
  `styleid` INT(10) UNSIGNED NOT NULL DEFAULT '1' COMMENT '风格ID',
  `subscribeurl` VARCHAR(120) NOT NULL DEFAULT '' COMMENT '引导素材',
  PRIMARY KEY (`acid`),
  KEY `idx_key` (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
--
-- 表的结构 `ims_activity_coupon`
--
 
CREATE TABLE IF NOT EXISTS `ims_activity_coupon` (
  `couponid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL COMMENT '公号序号',
  `type` tinyint(4) NOT NULL COMMENT '优惠券类型. 1为折扣券, 2为代金券',
  `title` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '标题',
  `couponsn` VARCHAR(50) NOT NULL,
  `description` text COMMENT '描述',
  `discount` DECIMAL(10,2) NOT NULL COMMENT '折扣券(折扣率), 代金券(面额)',
  `condition` DECIMAL(10,2) NOT NULL COMMENT '订单满多少可用',
  `starttime` INT(10) UNSIGNED NOT NULL COMMENT '开始时间',
  `endtime` INT(10) UNSIGNED NOT NULL COMMENT '结束时间',
  `limit` INT(11) NOT NULL DEFAULT '0' COMMENT '每人限领',
  `dosage` INT(11) UNSIGNED NOT NULL DEFAULT '0' COMMENT '已领取数量',
  `amount` INT(11) UNSIGNED NOT NULL COMMENT '总发行数量',
  `thumb` VARCHAR(500) NOT NULL COMMENT '缩略图',
  `credittype` VARCHAR(20) NOT NULL,
  `credit` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`couponid`),
  KEY `uniacid` (`uniacid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=39 ;
 
--
-- 表的结构 `ims_activity_coupon_allocation`
--
 
CREATE TABLE IF NOT EXISTS `ims_activity_coupon_allocation` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `couponid` INT(10) UNSIGNED NOT NULL,
  `groupid` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  KEY `uniacid` (`uniacid`,`couponid`,`groupid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=407 ;
 
--
-- 表的结构 `ims_activity_coupon_password`
--
 
CREATE TABLE IF NOT EXISTS `ims_activity_coupon_password` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `name` VARCHAR(50) NOT NULL DEFAULT '',
  `password` VARCHAR(200) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ;
 
--
-- 表的结构 `ims_activity_coupon_record`
--
 
CREATE TABLE IF NOT EXISTS `ims_activity_coupon_record` (
  `recid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '序号',
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `uid` INT(10) UNSIGNED NOT NULL COMMENT '用户编号',
  `grantmodule` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '发放模块',
  `granttime` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '发放时间',
  `usemodule` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '使用模块',
  `usetime` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '使用时间',
  `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '状态: 0 未发放, 1 已发放, 2 已使用',
  `operator` VARCHAR(30) NOT NULL COMMENT '操作员',
  `remark` VARCHAR(300) NOT NULL DEFAULT '',
  `couponid` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`recid`),
  KEY `couponid` (`uid`,`grantmodule`,`usemodule`,`status`),
  KEY `uniacid` (`uniacid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=60 ;
 
--
-- 表的结构 `ims_activity_exchange`
--
 
CREATE TABLE IF NOT EXISTS `ims_activity_exchange` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(11) NOT NULL,
  `title` VARCHAR(100) NOT NULL COMMENT '物品名称',
  `description` VARCHAR(1000) NOT NULL COMMENT '描述信息',
  `thumb` VARCHAR(500) NOT NULL COMMENT '缩略图',
  `type` tinyint(1) UNSIGNED NOT NULL COMMENT '物品类型,1折扣券,2代金券,3实物,4虚拟物品(未启用),5营销模块操作次数',
  `extra` VARCHAR(3000) NOT NULL DEFAULT '' COMMENT '兑换产品属性',
  `credit` INT(10) UNSIGNED NOT NULL COMMENT '兑换积分数量',
  `credittype` VARCHAR(10) NOT NULL COMMENT '兑换积分类型',
  `pretotal` INT(11) NOT NULL COMMENT '每个人最大兑换次数',
  `num` INT(11) NOT NULL COMMENT '已兑换礼品数量',
  `total` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '总量',
  `status` tinyint(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '状态',
  `starttime` INT(10) UNSIGNED NOT NULL,
  `endtime` INT(10) NOT NULL,
  `createtime` INT(10) UNSIGNED NOT NULL,
  `couponid` INT(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=72 ;
 
--
-- 表的结构 `ims_activity_exchange_trades`
--
 
CREATE TABLE IF NOT EXISTS `ims_activity_exchange_trades` (
  `tid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL COMMENT '统一公号',
  `uid` INT(10) UNSIGNED NOT NULL COMMENT '用户(粉丝)id',
  `exid` INT(10) UNSIGNED NOT NULL COMMENT '兑换产品 exchangeid',
  `type` INT(10) UNSIGNED NOT NULL,
  `createtime` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '交换记录创建时间',
  PRIMARY KEY (`tid`),
  KEY `uniacid` (`uniacid`,`uid`,`exid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;
 
--
-- 表的结构 `ims_activity_exchange_trades_shipping`
--
 
CREATE TABLE IF NOT EXISTS `ims_activity_exchange_trades_shipping` (
  `tid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `exid` INT(10) UNSIGNED NOT NULL,
  `uid` INT(10) UNSIGNED NOT NULL,
  `status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '订单状态,0为正常,-1为关闭,1为已发货,2为已完成',
  `createtime` INT(10) UNSIGNED NOT NULL,
  `province` VARCHAR(30) NOT NULL,
  `city` VARCHAR(30) NOT NULL,
  `district` VARCHAR(30) NOT NULL,
  `address` VARCHAR(255) NOT NULL,
  `zipcode` VARCHAR(6) NOT NULL,
  `mobile` VARCHAR(30) NOT NULL,
  `name` VARCHAR(30) NOT NULL COMMENT '收件人',
  PRIMARY KEY (`tid`),
  KEY `uniacid` (`uniacid`),
  KEY `uid` (`uid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=16 ;
 
--
-- 表的结构 `ims_activity_modules`
--
 
CREATE TABLE IF NOT EXISTS `ims_activity_modules` (
  `mid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL COMMENT '公号ID',
  `exid` INT(10) UNSIGNED NOT NULL COMMENT '活动参与次数id',
  `module` VARCHAR(50) NOT NULL COMMENT '模块名称',
  `uid` INT(10) UNSIGNED NOT NULL COMMENT '用户ID',
  `available` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '可用次数',
  PRIMARY KEY (`mid`),
  KEY `uniacid` (`uniacid`),
  KEY `module` (`module`),
  KEY `uid` (`uid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=21 ;
 
--
-- 表的结构 `ims_activity_modules_record`
--
 
CREATE TABLE IF NOT EXISTS `ims_activity_modules_record` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `mid` INT(10) UNSIGNED NOT NULL,
  `num` tinyint(3) NOT NULL DEFAULT '0' COMMENT 'num=1表示兑换,num=-1表示消费',
  `createtime` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  KEY `mid` (`mid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
 
--
-- 表的结构 `ims_basic_reply`
--
 
CREATE TABLE IF NOT EXISTS `ims_basic_reply` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `rid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `content` VARCHAR(1000) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=246 ;
 
--
-- 表的结构 `ims_core_attachment`
--
 
CREATE TABLE IF NOT EXISTS `ims_core_attachment` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `uid` INT(10) UNSIGNED NOT NULL,
  `filename` VARCHAR(255) NOT NULL,
  `attachment` VARCHAR(255) NOT NULL,
  `type` tinyint(3) UNSIGNED NOT NULL COMMENT '1.图片; 2.音乐;',
  `createtime` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=694 ;
 
--
-- 表的结构 `ims_core_cache`
--
 
CREATE TABLE IF NOT EXISTS `ims_core_cache` (
  `key` VARCHAR(50) NOT NULL COMMENT '缓存键名',
  `value` mediumtext NOT NULL COMMENT '缓存内容',
  PRIMARY KEY (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='缓存表';
 
 
 
--
-- 表的结构 `ims_core_paylog`
--
 
CREATE TABLE IF NOT EXISTS `ims_core_paylog` (
  `plid` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `type` VARCHAR(20) NOT NULL DEFAULT '',
  `uniacid` INT(11) NOT NULL,
  `acid` INT(11) NOT NULL,
  `openid` VARCHAR(40) NOT NULL DEFAULT '',
  `tid` VARCHAR(64) NOT NULL,
  `fee` DECIMAL(10,2) NOT NULL,
  `status` tinyint(4) NOT NULL DEFAULT '0',
  `module` VARCHAR(50) NOT NULL DEFAULT '',
  `tag` VARCHAR(2000) NOT NULL DEFAULT '',
  PRIMARY KEY (`plid`),
  KEY `idx_openid` (`openid`),
  KEY `idx_tid` (`tid`),
  KEY `idx_uniacid` (`uniacid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=51 ;
 
--
-- 表的结构 `ims_core_performance`
--
 
CREATE TABLE IF NOT EXISTS `ims_core_performance` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `type` tinyint(1) NOT NULL COMMENT '1:系统,2:数据库',
  `runtime` VARCHAR(10) NOT NULL COMMENT '运行时间',
  `runurl` VARCHAR(512) NOT NULL COMMENT '运行页面url',
  `runsql` VARCHAR(512) NOT NULL COMMENT '运行sql语句',
  `createtime` INT(10) NOT NULL COMMENT '记录时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=297223 ;
 
--
-- 表的结构 `ims_core_queue`
--
 
CREATE TABLE IF NOT EXISTS `ims_core_queue` (
  `qid` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '逻辑主键',
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `acid` INT(10) UNSIGNED NOT NULL,
  `message` VARCHAR(2000) NOT NULL DEFAULT '',
  `params` VARCHAR(1000) NOT NULL DEFAULT '',
  `keyword` VARCHAR(1000) NOT NULL DEFAULT '',
  `response` VARCHAR(2000) NOT NULL DEFAULT '',
  `module` VARCHAR(50) NOT NULL DEFAULT '',
  `dateline` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`qid`),
  KEY `uniacid` (`uniacid`,`acid`),
  KEY `module` (`module`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5475 ;
 
--
-- 表的结构 `ims_core_resource`
--
 
CREATE TABLE IF NOT EXISTS `ims_core_resource` (
  `mid` INT(11) NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `media_id` VARCHAR(100) NOT NULL,
  `trunk` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `type` VARCHAR(10) NOT NULL,
  `dateline` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`mid`),
  KEY `acid` (`uniacid`),
  KEY `type` (`type`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
--
-- 表的结构 `ims_core_sessions`
--
 
CREATE TABLE IF NOT EXISTS `ims_core_sessions` (
  `sid` CHAR(32) NOT NULL DEFAULT '' COMMENT 'sessionid唯一标识',
  `uniacid` INT(10) UNSIGNED NOT NULL COMMENT '所属公众号',
  `openid` VARCHAR(50) NOT NULL COMMENT '用户唯一标识',
  `data` VARCHAR(500) NOT NULL,
  `expiretime` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '超时时间',
  PRIMARY KEY (`sid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
--
-- 表的结构 `ims_core_settings`
--
 
CREATE TABLE IF NOT EXISTS `ims_core_settings` (
  `key` VARCHAR(200) NOT NULL COMMENT '设置键名',
  `value` text NOT NULL COMMENT '设置内容,大量数据将序列化',
  PRIMARY KEY (`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
--
-- 表的结构 `ims_core_wechats_attachment`
--
 
CREATE TABLE IF NOT EXISTS `ims_core_wechats_attachment` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `uid` INT(10) UNSIGNED NOT NULL,
  `filename` VARCHAR(255) NOT NULL,
  `attachment` VARCHAR(255) NOT NULL,
  `media_id` VARCHAR(255) NOT NULL,
  `type` VARCHAR(15) NOT NULL,
  `createtime` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  KEY `uniacid` (`uniacid`),
  KEY `media_id` (`media_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=650 ;
 
--
-- 表的结构 `ims_cover_reply`
--
 
CREATE TABLE IF NOT EXISTS `ims_cover_reply` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `multiid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `rid` INT(10) UNSIGNED NOT NULL,
  `module` VARCHAR(30) NOT NULL DEFAULT '',
  `do` VARCHAR(30) NOT NULL DEFAULT '',
  `title` VARCHAR(255) NOT NULL DEFAULT '',
  `description` VARCHAR(255) NOT NULL DEFAULT '',
  `thumb` VARCHAR(255) NOT NULL DEFAULT '',
  `url` VARCHAR(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=96 ;
 
--
-- 表的结构 `ims_cron`
--
 
CREATE TABLE IF NOT EXISTS `ims_cron` (
  `cronid` SMALLINT(6) UNSIGNED NOT NULL AUTO_INCREMENT,
  `available` tinyint(1) NOT NULL DEFAULT '0',
  `type` enum('user','system','plugin') NOT NULL DEFAULT 'user',
  `name` CHAR(50) NOT NULL DEFAULT '',
  `filename` CHAR(50) NOT NULL DEFAULT '',
  `lastrun` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `nextrun` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `weekday` tinyint(1) NOT NULL DEFAULT '0',
  `day` tinyint(2) NOT NULL DEFAULT '0',
  `hour` tinyint(2) NOT NULL DEFAULT '0',
  `minute` CHAR(36) NOT NULL DEFAULT '',
  PRIMARY KEY (`cronid`),
  KEY `nextrun` (`available`,`nextrun`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
 
--
-- 表的结构 `ims_custom_reply`
--
 
CREATE TABLE IF NOT EXISTS `ims_custom_reply` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `rid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `start1` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `end1` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `start2` INT(10) UNSIGNED NOT NULL,
  `end2` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  KEY `rid` (`rid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
 
--
-- 表的结构 `ims_images_reply`
--
 
CREATE TABLE IF NOT EXISTS `ims_images_reply` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `rid` INT(10) UNSIGNED NOT NULL COMMENT '规则ID',
  `title` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '标题',
  `description` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '介绍',
  `mediaid` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '图片id',
  `createtime` INT(10) NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=131 ;
 
--
-- 表的结构 `ims_mc_card`
--
 
CREATE TABLE IF NOT EXISTS `ims_mc_card` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `title` VARCHAR(100) NOT NULL DEFAULT '',
  `color` VARCHAR(255) NOT NULL DEFAULT '',
  `background` VARCHAR(255) NOT NULL DEFAULT '',
  `logo` VARCHAR(255) NOT NULL DEFAULT '',
  `format` VARCHAR(50) NOT NULL DEFAULT '',
  `fields` VARCHAR(1000) NOT NULL DEFAULT '',
  `snpos` INT(11) NOT NULL DEFAULT '0',
  `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否启用1:启用0:关闭',
  `business` text NOT NULL,
  PRIMARY KEY (`id`),
  KEY `uniacid` (`uniacid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=17 ;
 
--
-- 表的结构 `ims_mc_card_members`
--
 
CREATE TABLE IF NOT EXISTS `ims_mc_card_members` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `uid` INT(10) DEFAULT NULL,
  `cid` INT(10) NOT NULL DEFAULT '0',
  `cardsn` VARCHAR(20) NOT NULL DEFAULT '',
  `status` tinyint(1) NOT NULL,
  `createtime` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=85 ;
 
--
-- 表的结构 `ims_mc_chats_record`
--
 
CREATE TABLE IF NOT EXISTS `ims_mc_chats_record` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `acid` INT(10) UNSIGNED NOT NULL,
  `flag` tinyint(3) UNSIGNED NOT NULL DEFAULT '1',
  `openid` VARCHAR(32) NOT NULL,
  `msgtype` VARCHAR(15) NOT NULL,
  `content` VARCHAR(10000) NOT NULL,
  `createtime` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  KEY `uniacid` (`uniacid`,`acid`),
  KEY `openid` (`openid`),
  KEY `createtime` (`createtime`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=86 ;
 
--
-- 表的结构 `ims_mc_credits_recharge`
--
 
CREATE TABLE IF NOT EXISTS `ims_mc_credits_recharge` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `uid` INT(10) UNSIGNED NOT NULL,
  `tid` VARCHAR(20) NOT NULL,
  `transid` VARCHAR(30) NOT NULL,
  `fee` VARCHAR(10) NOT NULL,
  `status` tinyint(1) NOT NULL DEFAULT '0',
  `createtime` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_uniacid_uid` (`uniacid`,`uid`),
  KEY `idx_tid` (`tid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=23 ;
 
--
-- 表的结构 `ims_mc_credits_record`
--
 
CREATE TABLE IF NOT EXISTS `ims_mc_credits_record` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `uid` INT(10) UNSIGNED NOT NULL,
  `uniacid` INT(11) NOT NULL,
  `credittype` VARCHAR(10) NOT NULL DEFAULT '',
  `num` DECIMAL(10,2) NOT NULL DEFAULT '0.00',
  `operator` INT(10) UNSIGNED NOT NULL,
  `createtime` INT(10) UNSIGNED NOT NULL,
  `remark` VARCHAR(200) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `uniacid` (`uniacid`),
  KEY `uid` (`uid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=367 ;
 
--
-- 表的结构 `ims_mc_fans_groups`
--
 
CREATE TABLE IF NOT EXISTS `ims_mc_fans_groups` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `acid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `groups` VARCHAR(10000) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `uniacid` (`uniacid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
 
--
-- 表的结构 `ims_mc_groups`
--
 
CREATE TABLE IF NOT EXISTS `ims_mc_groups` (
  `groupid` INT(11) NOT NULL AUTO_INCREMENT,
  `uniacid` INT(11) NOT NULL DEFAULT '0',
  `title` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '会员组名称',
  `orderlist` tinyint(4) UNSIGNED NOT NULL DEFAULT '0',
  `isdefault` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`groupid`),
  KEY `uniacid` (`uniacid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=277 ;
 
--
-- 表的结构 `ims_mc_handsel`
--
 
CREATE TABLE IF NOT EXISTS `ims_mc_handsel` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) NOT NULL,
  `touid` INT(10) UNSIGNED NOT NULL COMMENT '用户uid',
  `fromuid` VARCHAR(32) NOT NULL COMMENT '来源',
  `module` VARCHAR(30) NOT NULL COMMENT '模块名称',
  `sign` VARCHAR(100) NOT NULL COMMENT '赠送积分的对象',
  `action` VARCHAR(20) NOT NULL COMMENT '动作(分享,阅读)',
  `credit_value` INT(10) UNSIGNED NOT NULL COMMENT '赠送积分多少',
  `createtime` INT(10) UNSIGNED NOT NULL COMMENT '记录添加时间',
  PRIMARY KEY (`id`),
  KEY `uid` (`touid`),
  KEY `uniacid` (`uniacid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=17 ;
 
--
-- 表的结构 `ims_mc_mapping_fans`
--
 
CREATE TABLE IF NOT EXISTS `ims_mc_mapping_fans` (
  `fanid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `acid` INT(10) UNSIGNED NOT NULL COMMENT '公众号ID',
  `uniacid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '统一公号(冗余列)',
  `uid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '统一用户',
  `openid` VARCHAR(255) NOT NULL COMMENT '用户的唯一身份ID',
  `groupid` INT(10) UNSIGNED DEFAULT '0' COMMENT '粉丝所在组id',
  `salt` CHAR(8) NOT NULL DEFAULT '' COMMENT '加密盐',
  `follow` tinyint(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '是否订阅',
  `followtime` INT(10) UNSIGNED NOT NULL,
  `unfollowtime` INT(10) UNSIGNED NOT NULL,
  `tag` VARCHAR(1000) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
  `updatetime` INT(10) UNSIGNED DEFAULT '0' COMMENT '粉丝信息最后更新时间',
  PRIMARY KEY (`fanid`),
  UNIQUE KEY `sasdf` (`salt`),
  KEY `acid` (`acid`),
  KEY `uniacid` (`uniacid`),
  KEY `openid` (`openid`),
  KEY `updatetime` (`uniacid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=75171 ;
 
--
-- 表的结构 `ims_mc_members`
--
 
CREATE TABLE IF NOT EXISTS `ims_mc_members` (
  `uid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL COMMENT '统一公号ID',
  `mobile` VARCHAR(11) NOT NULL DEFAULT '' COMMENT '手机号码',
  `email` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '电子邮箱',
  `password` VARCHAR(32) NOT NULL DEFAULT '' COMMENT '密码',
  `salt` VARCHAR(8) NOT NULL DEFAULT '' COMMENT '盐',
  `groupid` INT(11) NOT NULL DEFAULT '0',
  `credit1` DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT '0.00' COMMENT '积分',
  `credit2` DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT '0.00' COMMENT '余额',
  `credit3` DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT '0.00',
  `credit4` DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT '0.00',
  `credit5` DECIMAL(10,2) UNSIGNED NOT NULL DEFAULT '0.00',
  `createtime` INT(10) UNSIGNED NOT NULL COMMENT '加入时间',
  `realname` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '真实姓名',
  `nickname` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '昵称',
  `avatar` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '头像',
  `qq` VARCHAR(15) NOT NULL DEFAULT '' COMMENT 'QQ号',
  `vip` tinyint(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'VIP级别,0为普通会员',
  `gender` tinyint(1) NOT NULL DEFAULT '0' COMMENT '性别(0:保密 1:男 2:女)',
  `birthyear` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0' COMMENT '生日年',
  `birthmonth` tinyint(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '生日月',
  `birthday` tinyint(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '生日',
  `constellation` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '星座',
  `zodiac` VARCHAR(5) NOT NULL DEFAULT '' COMMENT '生肖',
  `telephone` VARCHAR(15) NOT NULL DEFAULT '' COMMENT '固定电话',
  `idcard` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '证件号码',
  `studentid` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '学号',
  `grade` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '班级',
  `address` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '邮寄地址',
  `zipcode` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '邮编',
  `nationality` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '国籍',
  `resideprovince` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '居住省份',
  `residecity` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '居住城市',
  `residedist` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '居住行政区/县',
  `graduateschool` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '毕业学校',
  `company` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '公司',
  `education` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '学历',
  `occupation` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '职业',
  `position` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '职位',
  `revenue` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '年收入',
  `affectivestatus` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '情感状态',
  `lookingfor` VARCHAR(255) NOT NULL DEFAULT '' COMMENT ' 交友目的',
  `bloodtype` VARCHAR(5) NOT NULL DEFAULT '' COMMENT '血型',
  `height` VARCHAR(5) NOT NULL DEFAULT '' COMMENT '身高',
  `weight` VARCHAR(5) NOT NULL DEFAULT '' COMMENT '体重',
  `alipay` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '支付宝帐号',
  `msn` VARCHAR(30) NOT NULL DEFAULT '' COMMENT 'MSN',
  `taobao` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '阿里旺旺',
  `site` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '主页',
  `bio` text NOT NULL COMMENT '自我介绍',
  `interest` text NOT NULL COMMENT '兴趣爱好',
  PRIMARY KEY (`uid`),
  KEY `groupid` (`groupid`),
  KEY `uniacid` (`uniacid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9983 ;
 
--
-- 表的结构 `ims_modules`
--
 
CREATE TABLE IF NOT EXISTS `ims_modules` (
  `mid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(100) NOT NULL COMMENT '标识',
  `type` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '类型',
  `title` VARCHAR(100) NOT NULL COMMENT '名称',
  `version` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '版本',
  `ability` VARCHAR(500) NOT NULL COMMENT '功能描述',
  `description` VARCHAR(1000) NOT NULL COMMENT '介绍',
  `author` VARCHAR(50) NOT NULL COMMENT '作者',
  `url` VARCHAR(255) NOT NULL COMMENT '发布页面',
  `settings` tinyint(1) NOT NULL DEFAULT '0' COMMENT '扩展设置项',
  `subscribes` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '订阅的消息类型',
  `handles` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '能够直接处理的消息类型',
  `isrulefields` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否有规则嵌入项',
  `issystem` tinyint(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否是系统模块',
  `issolution` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
  `target` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  PRIMARY KEY (`mid`),
  KEY `idx_name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=399 ;
 
--
-- 表的结构 `ims_modules_bindings`
--
 
CREATE TABLE IF NOT EXISTS `ims_modules_bindings` (
  `eid` INT(11) NOT NULL AUTO_INCREMENT,
  `module` VARCHAR(30) NOT NULL DEFAULT '',
  `entry` VARCHAR(10) NOT NULL DEFAULT '',
  `call` VARCHAR(50) NOT NULL DEFAULT '',
  `title` VARCHAR(50) NOT NULL,
  `do` VARCHAR(30) NOT NULL,
  `state` VARCHAR(200) NOT NULL,
  `direct` INT(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`eid`),
  KEY `idx_module` (`module`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2670 ;
 
--
-- 表的结构 `ims_music_reply`
--
 
CREATE TABLE IF NOT EXISTS `ims_music_reply` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `rid` INT(10) UNSIGNED NOT NULL COMMENT '规则ID',
  `title` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '标题',
  `description` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '介绍',
  `url` VARCHAR(300) NOT NULL DEFAULT '' COMMENT '音乐地址',
  `hqurl` VARCHAR(300) NOT NULL DEFAULT '' COMMENT '高清地址',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=167 ;
 
--
-- 表的结构 `ims_news_reply`
--
 
CREATE TABLE IF NOT EXISTS `ims_news_reply` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `rid` INT(10) UNSIGNED NOT NULL,
  `title` VARCHAR(50) NOT NULL,
  `author` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '作者',
  `description` VARCHAR(255) NOT NULL,
  `thumb` VARCHAR(255) NOT NULL COMMENT '封面图片',
  `content` text NOT NULL,
  `url` VARCHAR(255) NOT NULL,
  `displayorder` INT(10) NOT NULL,
  `incontent` tinyint(1) NOT NULL DEFAULT '0' COMMENT '封面是否显示在正文中',
  `createtime` INT(10) NOT NULL COMMENT '发布时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=763 ;
 
--
-- 表的结构 `ims_profile_fields`
--
 
CREATE TABLE IF NOT EXISTS `ims_profile_fields` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `field` VARCHAR(255) NOT NULL,
  `available` tinyint(1) NOT NULL DEFAULT '1',
  `title` VARCHAR(255) NOT NULL,
  `description` VARCHAR(255) NOT NULL,
  `displayorder` SMALLINT(6) NOT NULL DEFAULT '0',
  `required` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否必填',
  `unchangeable` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否不可修改',
  `showinregister` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否显示在注册表单',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=37 ;
 
--
-- 表的结构 `ims_qrcode`
--
 
CREATE TABLE IF NOT EXISTS `ims_qrcode` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `acid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `qrcid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '二维码场景ID',
  `name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '场景名称',
  `keyword` VARCHAR(100) NOT NULL COMMENT '关联关键字',
  `model` tinyint(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '模式,1临时,2为永久',
  `ticket` VARCHAR(250) NOT NULL DEFAULT '' COMMENT '标识',
  `expire` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '过期时间',
  `subnum` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '关注扫描次数',
  `createtime` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '生成时间',
  `status` tinyint(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '0为未启用,1为启用',
  PRIMARY KEY (`id`),
  KEY `idx_qrcid` (`qrcid`),
  KEY `uniacid` (`uniacid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=24 ;
 
--
-- 表的结构 `ims_qrcode_stat`
--
 
CREATE TABLE IF NOT EXISTS `ims_qrcode_stat` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `acid` INT(10) UNSIGNED NOT NULL,
  `qid` INT(10) UNSIGNED NOT NULL,
  `openid` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '用户的唯一身份ID',
  `type` tinyint(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '是否发生在订阅时',
  `qrcid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '二维码场景ID',
  `name` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '场景名称',
  `createtime` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '生成时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;
 
--
-- 表的结构 `ims_rule`
--
 
CREATE TABLE IF NOT EXISTS `ims_rule` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `name` VARCHAR(50) NOT NULL DEFAULT '',
  `module` VARCHAR(50) NOT NULL,
  `displayorder` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '规则排序',
  `status` tinyint(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '规则状态,0禁用,1启用,2置顶',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=432 ;
 
--
-- 表的结构 `ims_rule_keyword`
--
 
CREATE TABLE IF NOT EXISTS `ims_rule_keyword` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `rid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '规则ID',
  `uniacid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '所属帐号',
  `module` VARCHAR(50) NOT NULL COMMENT '对应模块',
  `content` VARCHAR(255) NOT NULL COMMENT '内容',
  `type` tinyint(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '类型1匹配,2包含,3正则',
  `displayorder` tinyint(3) UNSIGNED NOT NULL DEFAULT '1' COMMENT '规则排序,255为置顶,其它为普通排序',
  `status` tinyint(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '规则状态,0禁用,1启用',
  PRIMARY KEY (`id`),
  KEY `idx_content` (`content`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1832 ;
 
--
-- 表的结构 `ims_site_article`
--
 
CREATE TABLE IF NOT EXISTS `ims_site_article` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `rid` INT(10) UNSIGNED NOT NULL COMMENT '关联规则id',
  `kid` INT(10) UNSIGNED NOT NULL COMMENT '关联关键字id',
  `iscommend` tinyint(1) NOT NULL DEFAULT '0',
  `ishot` tinyint(1) UNSIGNED NOT NULL DEFAULT '0',
  `pcate` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '一级分类',
  `ccate` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '二级分类',
  `template` VARCHAR(30) NOT NULL COMMENT '内容模板',
  `title` VARCHAR(100) NOT NULL DEFAULT '',
  `description` VARCHAR(100) NOT NULL DEFAULT '',
  `content` mediumtext NOT NULL,
  `thumb` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '缩略图',
  `source` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '来源',
  `author` VARCHAR(50) NOT NULL COMMENT '作者',
  `displayorder` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `linkurl` VARCHAR(500) NOT NULL DEFAULT '',
  `createtime` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `type` VARCHAR(10) NOT NULL DEFAULT '',
  `credit` VARCHAR(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `idx_iscommend` (`iscommend`),
  KEY `idx_ishot` (`ishot`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=23 ;
 
--
-- 表的结构 `ims_site_category`
--
 
CREATE TABLE IF NOT EXISTS `ims_site_category` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '所属帐号',
  `nid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '关联导航id',
  `name` VARCHAR(50) NOT NULL COMMENT '分类名称',
  `parentid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '上级分类ID,0为第一级',
  `displayorder` tinyint(3) UNSIGNED NOT NULL DEFAULT '0' COMMENT '排序',
  `enabled` tinyint(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '是否开启',
  `icon` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '分类图标',
  `description` VARCHAR(100) NOT NULL DEFAULT '' COMMENT '分类描述',
  `styleid` INT(10) UNSIGNED NOT NULL COMMENT '风格id',
  `templatefile` VARCHAR(100) NOT NULL DEFAULT '',
  `linkurl` VARCHAR(500) NOT NULL DEFAULT '',
  `ishomepage` tinyint(1) NOT NULL DEFAULT '0',
  `icontype` tinyint(1) UNSIGNED NOT NULL,
  `css` VARCHAR(500) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=19 ;
 
--
-- 表的结构 `ims_site_multi`
--
 
CREATE TABLE IF NOT EXISTS `ims_site_multi` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `title` VARCHAR(30) NOT NULL,
  `styleid` INT(10) UNSIGNED NOT NULL COMMENT '风格id',
  `site_info` text NOT NULL,
  `quickmenu` VARCHAR(2000) NOT NULL,
  `status` tinyint(3) UNSIGNED NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  KEY `uniacid` (`uniacid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='多微站' AUTO_INCREMENT=183 ;
 
--
-- 表的结构 `ims_site_nav`
--
 
CREATE TABLE IF NOT EXISTS `ims_site_nav` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `multiid` INT(10) UNSIGNED NOT NULL,
  `section` tinyint(4) NOT NULL DEFAULT '0',
  `module` VARCHAR(50) NOT NULL DEFAULT '',
  `displayorder` SMALLINT(5) UNSIGNED NOT NULL COMMENT '排序',
  `name` VARCHAR(50) NOT NULL COMMENT '导航名称',
  `description` VARCHAR(1000) NOT NULL DEFAULT '',
  `position` tinyint(4) NOT NULL DEFAULT '1' COMMENT '显示位置,1首页,2个人中心',
  `url` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '链接地址',
  `icon` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '图标',
  `css` VARCHAR(1000) NOT NULL DEFAULT '' COMMENT '扩展CSS',
  `status` tinyint(1) UNSIGNED NOT NULL DEFAULT '1' COMMENT '0为隐藏,1为显示',
  PRIMARY KEY (`id`),
  KEY `uniacid` (`uniacid`),
  KEY `muiltiid` (`multiid`),
  KEY `multiid` (`multiid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=381 ;
 
--
-- 表的结构 `ims_site_slide`
--
 
CREATE TABLE IF NOT EXISTS `ims_site_slide` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `multiid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `title` VARCHAR(255) NOT NULL,
  `url` VARCHAR(255) NOT NULL DEFAULT '',
  `thumb` VARCHAR(255) NOT NULL DEFAULT '',
  `displayorder` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `uniacid` (`uniacid`),
  KEY `multiid` (`multiid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=23 ;
 
--
-- 表的结构 `ims_site_styles`
--
 
CREATE TABLE IF NOT EXISTS `ims_site_styles` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `templateid` INT(10) UNSIGNED NOT NULL,
  `name` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=170 ;
 
--
-- 表的结构 `ims_site_styles_vars`
--
 
CREATE TABLE IF NOT EXISTS `ims_site_styles_vars` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `templateid` INT(10) UNSIGNED NOT NULL COMMENT '风格ID',
  `styleid` INT(10) UNSIGNED NOT NULL,
  `variable` VARCHAR(50) NOT NULL COMMENT '模板预设变量',
  `content` text NOT NULL COMMENT '变量值',
  `description` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
 
--
-- 表的结构 `ims_site_templates`
--
 
CREATE TABLE IF NOT EXISTS `ims_site_templates` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '标识',
  `version` VARCHAR(10) NOT NULL,
  `title` VARCHAR(30) NOT NULL COMMENT '名称',
  `description` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '描述',
  `author` VARCHAR(50) NOT NULL COMMENT '作者',
  `url` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '发布页面',
  `type` VARCHAR(20) NOT NULL DEFAULT '',
  `sections` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=212 ;
 
--
-- 表的结构 `ims_stat_keyword`
--
 
CREATE TABLE IF NOT EXISTS `ims_stat_keyword` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL COMMENT '所属帐号ID',
  `rid` VARCHAR(10) NOT NULL COMMENT '规则ID',
  `kid` INT(10) UNSIGNED NOT NULL COMMENT '关键字ID',
  `hit` INT(10) UNSIGNED NOT NULL COMMENT '命中次数',
  `lastupdate` INT(10) UNSIGNED NOT NULL COMMENT '最后触发时间',
  `createtime` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_createtime` (`createtime`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1028 ;
 
--
-- 表的结构 `ims_stat_msg_history`
--
 
CREATE TABLE IF NOT EXISTS `ims_stat_msg_history` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL COMMENT '所属帐号ID',
  `rid` INT(10) UNSIGNED NOT NULL COMMENT '命中规则ID',
  `kid` INT(10) UNSIGNED NOT NULL COMMENT '命中关键字ID',
  `from_user` VARCHAR(50) NOT NULL COMMENT '用户的唯一身份ID',
  `module` VARCHAR(50) NOT NULL COMMENT '命中模块',
  `message` VARCHAR(1000) NOT NULL COMMENT '用户发送的消息',
  `type` VARCHAR(10) NOT NULL DEFAULT '' COMMENT '消息类型',
  `createtime` INT(10) UNSIGNED NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_createtime` (`createtime`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4221 ;
 
--
-- 表的结构 `ims_stat_rule`
--
 
CREATE TABLE IF NOT EXISTS `ims_stat_rule` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL COMMENT '所属帐号ID',
  `rid` INT(10) UNSIGNED NOT NULL COMMENT '规则ID',
  `hit` INT(10) UNSIGNED NOT NULL COMMENT '命中次数',
  `lastupdate` INT(10) UNSIGNED NOT NULL COMMENT '最后触发时间',
  `createtime` INT(10) UNSIGNED NOT NULL COMMENT '记录新建的日期',
  PRIMARY KEY (`id`),
  KEY `idx_createtime` (`createtime`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2572 ;
 
--
-- 表的结构 `ims_uni_account`
--
 
CREATE TABLE IF NOT EXISTS `ims_uni_account` (
  `uniacid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `groupid` INT(10) NOT NULL DEFAULT '0',
  `name` VARCHAR(100) NOT NULL,
  `description` VARCHAR(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`uniacid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=444 ;
 
--
-- 表的结构 `ims_uni_account_modules`
--
 
CREATE TABLE IF NOT EXISTS `ims_uni_account_modules` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `module` VARCHAR(50) NOT NULL DEFAULT '',
  `enabled` tinyint(1) UNSIGNED NOT NULL,
  `settings` text NOT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_module` (`module`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1674 ;
 
--
-- 表的结构 `ims_uni_account_users`
--
 
CREATE TABLE IF NOT EXISTS `ims_uni_account_users` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `uid` INT(10) UNSIGNED NOT NULL,
  `role` VARCHAR(255) NOT NULL COMMENT 'manager管理员,operator操作者',
  PRIMARY KEY (`id`),
  KEY `idx_memberid` (`uid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=442 ;
 
--
-- 表的结构 `ims_uni_group`
--
 
CREATE TABLE IF NOT EXISTS `ims_uni_group` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `modules` VARCHAR(5000) NOT NULL DEFAULT '',
  `templates` VARCHAR(5000) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;
 
--
-- 表的结构 `ims_uni_settings`
--
 
CREATE TABLE IF NOT EXISTS `ims_uni_settings` (
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `passport` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '会员中心注册参数',
  `oauth` VARCHAR(100) NOT NULL DEFAULT '',
  `jsauth_acid` INT(10) UNSIGNED NOT NULL,
  `uc` VARCHAR(500) NOT NULL COMMENT 'ucenter 通信参数',
  `notify` VARCHAR(2000) NOT NULL DEFAULT '',
  `creditnames` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '积分别名',
  `creditbehaviors` VARCHAR(500) NOT NULL DEFAULT '' COMMENT '积分行为说明',
  `welcome` VARCHAR(60) NOT NULL DEFAULT '',
  `default` VARCHAR(60) NOT NULL DEFAULT '',
  `default_message` VARCHAR(1000) NOT NULL DEFAULT '',
  `shortcuts` VARCHAR(5000) NOT NULL DEFAULT '',
  `payment` VARCHAR(2000) NOT NULL DEFAULT '',
  `groupdata` VARCHAR(100) NOT NULL,
  `stat` VARCHAR(300) NOT NULL,
  `menuset` text NOT NULL,
  `default_site` INT(10) UNSIGNED DEFAULT '0',
  `sync` tinyint(3) UNSIGNED NOT NULL,
  PRIMARY KEY (`uniacid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
--
-- 表的结构 `ims_users`
--
 
CREATE TABLE IF NOT EXISTS `ims_users` (
  `uid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户编号',
  `groupid` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `username` VARCHAR(30) NOT NULL COMMENT '用户名',
  `password` VARCHAR(200) NOT NULL COMMENT '用户密码',
  `salt` VARCHAR(10) NOT NULL COMMENT '加密盐',
  `status` tinyint(4) NOT NULL DEFAULT '0',
  `joindate` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `joinip` VARCHAR(15) NOT NULL DEFAULT '',
  `lastvisit` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `lastip` VARCHAR(15) NOT NULL DEFAULT '',
  `remark` VARCHAR(500) NOT NULL DEFAULT '',
  PRIMARY KEY (`uid`),
  UNIQUE KEY `username` (`username`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='用户表' AUTO_INCREMENT=74 ;
 
--
-- 表的结构 `ims_users_group`
--
 
CREATE TABLE IF NOT EXISTS `ims_users_group` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  `package` VARCHAR(5000) NOT NULL DEFAULT '',
  `maxaccount` INT(10) UNSIGNED NOT NULL DEFAULT '0',
  `maxsubaccount` INT(10) UNSIGNED NOT NULL COMMENT '子公号最多添加数量,为0为不可以添加',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;
 
--
-- 表的结构 `ims_users_permission`
--
 
CREATE TABLE IF NOT EXISTS `ims_users_permission` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uniacid` INT(10) UNSIGNED NOT NULL,
  `uid` INT(10) UNSIGNED NOT NULL,
  `url` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=22 ;
 
--
-- 表的结构 `ims_users_profile`
--
 
CREATE TABLE IF NOT EXISTS `ims_users_profile` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `uid` INT(10) UNSIGNED NOT NULL,
  `createtime` INT(10) UNSIGNED NOT NULL COMMENT '加入时间',
  `realname` VARCHAR(10) NOT NULL DEFAULT '',
  `nickname` VARCHAR(20) NOT NULL DEFAULT '',
  `avatar` VARCHAR(100) NOT NULL DEFAULT '',
  `qq` VARCHAR(15) NOT NULL DEFAULT '',
  `mobile` VARCHAR(11) NOT NULL DEFAULT '',
  `fakeid` VARCHAR(30) NOT NULL,
  `vip` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  `gender` tinyint(1) NOT NULL DEFAULT '0',
  `birthyear` SMALLINT(6) UNSIGNED NOT NULL DEFAULT '0',
  `birthmonth` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  `birthday` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
  `constellation` VARCHAR(10) NOT NULL DEFAULT '',
  `zodiac` VARCHAR(5) NOT NULL DEFAULT '',
  `telephone` VARCHAR(15) NOT NULL DEFAULT '',
  `idcard` VARCHAR(30) NOT NULL DEFAULT '',
  `studentid` VARCHAR(50) NOT NULL DEFAULT '',
  `grade` VARCHAR(10) NOT NULL DEFAULT '',
  `address` VARCHAR(255) NOT NULL DEFAULT '',
  `zipcode` VARCHAR(10) NOT NULL DEFAULT '',
  `nationality` VARCHAR(30) NOT NULL DEFAULT '',
  `resideprovince` VARCHAR(30) NOT NULL DEFAULT '',
  `residecity` VARCHAR(30) NOT NULL DEFAULT '',
  `residedist` VARCHAR(30) NOT NULL DEFAULT '',
  `graduateschool` VARCHAR(50) NOT NULL DEFAULT '',
  `company` VARCHAR(50) NOT NULL DEFAULT '',
  `education` VARCHAR(10) NOT NULL DEFAULT '',
  `occupation` VARCHAR(30) NOT NULL DEFAULT '',
  `position` VARCHAR(30) NOT NULL DEFAULT '',
  `revenue` VARCHAR(10) NOT NULL DEFAULT '',
  `affectivestatus` VARCHAR(30) NOT NULL DEFAULT '',
  `lookingfor` VARCHAR(255) NOT NULL DEFAULT '',
  `bloodtype` VARCHAR(5) NOT NULL DEFAULT '',
  `height` VARCHAR(5) NOT NULL DEFAULT '',
  `weight` VARCHAR(5) NOT NULL DEFAULT '',
  `alipay` VARCHAR(30) NOT NULL DEFAULT '',
  `msn` VARCHAR(30) NOT NULL DEFAULT '',
  `email` VARCHAR(50) NOT NULL DEFAULT '',
  `taobao` VARCHAR(30) NOT NULL DEFAULT '',
  `site` VARCHAR(30) NOT NULL DEFAULT '',
  `bio` text NOT NULL COMMENT '自我介绍',
  `interest` text NOT NULL COMMENT '兴趣爱好',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=19 ;
 
--
-- 表的结构 `ims_video_reply`
--
 
CREATE TABLE IF NOT EXISTS `ims_video_reply` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `rid` INT(10) UNSIGNED NOT NULL COMMENT '规则ID',
  `title` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '标题',
  `description` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '介绍',
  `mediaid` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '视频id',
  `createtime` INT(10) NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=157 ;
 
--
-- 表的结构 `ims_voice_reply`
--
 
CREATE TABLE IF NOT EXISTS `ims_voice_reply` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `rid` INT(10) UNSIGNED NOT NULL COMMENT '规则ID',
  `title` VARCHAR(50) NOT NULL DEFAULT '' COMMENT '标题',
  `mediaid` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '语音id',
  `createtime` INT(10) NOT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=9 ;

带你走近AngularJS - 基本功能介绍 - 葡萄城控件技术团队 - 博客园

mikel阅读(1028)

来源: 带你走近AngularJS – 基本功能介绍 – 葡萄城控件技术团队 – 博客园

带你走近AngularJS系列:

  1. 带你走近AngularJS – 基本功能介绍
  2. 带你走近AngularJS – 体验指令实例
  3. 带你走近AngularJS – 创建自定义指令

————————————————————————————————

AngularJS是Google推出的一款Web应用开发框架。它提供了一系列兼容性良好并且可扩展的服务,包括数据绑定、DOM操作、MVC设 计模式和模块加载等。本文专注于AngularJS 指令的使用,在我们进入主题之前,我们将快速浏览AngularJS的基本用法。

AngularJS 不仅仅是一个类库,而是提供了一个完整的框架。它避免了您和多个类库交互,需要熟悉多套接口的繁琐工作。它由Google Chrome的开发人员设计,引领着下一代Web应用开发。也许我们5年或10年后不会使用AngularJS,但是它的设计精髓将会一直被沿用。

了解AngularJS的开发人员,你肯定会为AngularJS自定义指令(它的功能相当于.NET 平台下的自定义控件)功能感到兴奋。自定义指令允许你扩展HTML标签和特性。指令可以复用并且可以跨项目使用。

自定义指令已经得到了广泛的应用,其中值得一提的是-Wijmo控件集。它包含了近50款基于AngularJS 控件。Wijmo是用于创建桌面和移动Web应用程序的HTML5前端控件集。从交互式图表到强大的表格控件,Wijmo几乎包含了我们所需要的一切。可以从官网了解Wijmo的更多信息。所以,Wijmo是学习AngularJS很好的参考示例:AngularJS Directive Gallery

image

 

创建自定义指令是非常容易的。指令可以测试、维护并且在多个项目中复用。

使用AngularJS, 需要在HTML页面引用脚本文件,给HTML或Body标签添加ng-app 特性。下面是一个使用AngularJS的简单实例:

复制代码
<html>
  <head>
    <script src="http://code.angularjs.org/angular-1.0.1.js"></script>
  </head>
  <body ng-app ng-init="msg = '葡萄城控件团队博客'">
    <input ng-model="msg" />
    <p>{{msg}}</p>
  </body>
</html>
复制代码

 

当AngularJS 加载后,它会在文档中搜索ng-app 特性。这个标签通常被设置给项目的主要模块。一旦发现,Angular 就会对文档进行操作。

在这个例子中,ng-init 特性初始化了一个msg 变量“葡萄城控件团队博客”, ng-model 特性把它和input 控件进行了双向绑定(注意:大括号是绑定的标记)。AngularJS 会解析这个标记,随着input值改变实时更新msg 文本值。可以从链接查看效果:点击进入

image

 

AngularJS 模块

模块可以说是AngularJS 的根本。它包含配置、控制、过滤、工厂模式、指令及其它模块。

如果你熟悉.NET平台,但初步学习Angular。下面的表格是一个简要的对比,帮助你理解Angular中的角色扮演情况:

AngularJS .NET 摘要
module Assembly 应用开发模块
controller ViewModel 控制器,启到不同层面间的组织作用
scope DataContext 为视图提供绑定数据
filter ValueConverter 数据传输到视图之前修改数据
directive Component 可复用的UI元素,也可以理解为前端插件
factory, service Utility classes 为其他模块元素提供服务

例如,下面的代码使用控制器、过滤器和指令创建了一个模块:

复制代码
// the main (app) module
var myApp = angular.module("myApp", []);

// add a controller
myApp.controller("myCtrl", function($scope) {
    $scope.msg = "grapecity team blog";
});

// add a filter
myApp.filter("myUpperFilter", function() {
    return function(input) {
        return input.toUpperCase();
    }
});

// add a directive
myApp.directive("myDctv", function() {
    return function(scope, element, attrs) {
        element.bind("mouseenter", function() {
            element.css("background", "yellow");
        });            
        element.bind("mouseleave", function() {
            element.css("background", "none");
        });            
    }
});
复制代码

 

上面示例中module 方法的第一个参数为模块的名称,第二个参数为它的依赖模块列表。我们创建了一个独立的模块,不依赖于其它模块。所以第二个参数为空数组(注意:即使它为 空,我们也必须填写这个参数。否则,该方法回去检索之前的同名模块)。这部分我们将在后续的文章中详细阐述。

controller 构造函数获取$scope 对象,用于存储所有controller 暴露的接口和方法。scope 由Angular 传递到视图和指令层。在这个例子中, controller 添加了msg 属性给scope对象。一个应用模块可以包含多个controller,每个controller各司其职,控制一个或多个视图。

filter 构造函数返回一个方法用于更改input文本的显示方式。Angular 提供很多内置的filter,同时,你也可以添加自定义filter,操作方式Angular内置filter相同。在这个例子中,实现了小写到大写的转 换。Filter不仅可以格式化文本值,还可以更改数组。AngularJS 内置的格式化Filter有number、date、currency、uppercase和lowercase。数组 filter有filter、orderBy和 limitTo。Filter需要设置参数,语法格式也是固定的: someValue |filterName:filterParameter1:filterParameter2….

directive 构造函数返回了一个方法,该方法用于传递一个元素,并依据scope中的参数对其进行修改。示例中我们绑定了mouseenter 和mouseleave 事件用于切换文本高亮显示。这是一个功能简单的指令,在后续的章节将展示如何创建一些复杂指令。

下面是使用模块构建的页面:

复制代码
<body ng-app="myApp" ng-controller="myCtrl">
    <input ng-model="msg" />
    <p my-dctv >
        {{msg | myUpperFilter }}
    </p>
</body>
复制代码

 

可以从链接查看效果:点击进入

image

 

注意应用中module、controller和filter 作为特性值应用。它们代表JavaScript 对象,因此名称是区分大小写的。指令的名称同样也是属性值,它作为HTML标签被解析,所以也是区分大小写的。但AngularJS 会自动转换这些特性为小写,例如“myDctv” 指令变成”my-dctv” (就像内置的指令ngApp, ngController, 和ngModel会转换成 “ng-app”, “ng-controller”, 和”ng-model”。

 

项目组织结构

使用AngularJS 可以创建大型Web项目。你可以把项目拆分为多个模块,把一个模块拆分为多个模块文件。同时,可以按照你的使用习惯组织这些文件。

列举一个典型的项目结构:

Root
default.html
styles
app.css
partials
home.html
product.html
store.html
scripts
app.js
controllers
productCtrl.js
storeCtrl.js
directives
gridDctv.js
chartDctv.js
filters
formatFilter.js
services
dataSvc.js
vendor
angular.js
angular.min.js

假设如果你仅希望项目中使用一个模块,你可以如此定义:

// app.js

angular.module("appModule", []);

 

如果希望在模块中添加元素,你可以通过名称调用模块向其中添加。例如: formatFilter.js 文件包含以下元素:

复制代码
// formatFilter.js
// 通过名称获取模块
var app = angular.module("appModule");

// 向模块中添加filter
app.filter("formatFilter", function() {
  return function(input, format) {
    return Globalize.format(input, format);
  }
}})
复制代码

如果你的应用包含多个模块,注意在添加模块时添加其它模块的引用。例如,一个应用包含三个模块app、controls、和data :

复制代码
// app.js (名称为app的模块依赖于controls和data模块)
angular.module("app", [ "controls", "data"])

// controls.js (controls 模块依赖于data 模块)
angular.module("controls", [ "data" ])

// data.js (data 模块没有依赖项,数组为空)
angular.module("data", [])
复制代码

应用的主页面中需要声明ng-app 指令, AngularJS 会自动添加需要的引用:

<html ng-app="app">
...
</html>

进行以上声明后,你就可以在所有的页面中使用其它三个模块声明的元素了。

这篇文章中我们了解了AngularJS的基本使用方法及结构。在下一个章节中,我们将阐述基本的指令概念,同时,会创建一些实例来帮助你加深指令作用的理解。

巧用Notepad++插件:JS代码格式化(JSToolNpp) - 我才是疯子

mikel阅读(1483)

来源: 巧用Notepad++插件:JS代码格式化(JSToolNpp) – 我才是疯子

我在做开发的时候经常会用到Noepad++,这个编辑器使用比较方便,启动速度够快,轻便,功能也强大,还有插件也蛮多。

我们在写Js的时候,经常需要格式化Js代码,这个时候就可以试下这款插件:JsToolNpp(以前也叫:JsMin),针对Js文件格式化效果很好,强烈推荐。

下载插件

插件 > Plugin Manager > Show Plugin Manager

jstoolnpp install

安装插件

找到JsTool,选中,然后点击Install按钮,自动下载安装,重启Notepad++

jstoolnpp install

使用插件

在插件选项里面会多出一个JSTool选项,选择JSFormat就可以格式化了,效果很棒,这里就不截图了~

jstoolnpp use