环境编码
|
PHP、MySQL版本
PHP7.2 由 PHP5.4 升级为 PHP7.2 64位 |
MySQL5.7 由 MySQL5.6 升级为 MySQL5.7 64位 |
PHP版本升级已弃用功能
each() 函数已弃用,建议使用 foreach() |
语法样例: $arr = [1, 2, 3, 4]; foreach($arr as $key => $val) { echo "\$a[$key] => $val<br>"; } 输出结果: $a[0] => 1 $a[1] => 2 $a[2] => 3 $a[3] => 4 |
PHP版本升级兼容
1 由于php7+不支持php_mysql.dll,所以需要改为php_mysqli.dll,有关MySQL的函数需要调整为 mysqli相关函数,代码中遇到请注意 |
mysql 转 mysqli 相关兼容
mysql_connect(host, user, pwd, connection) 替换 mysqli_connect(host, user, pwd, db) mysql_query($q, $c) 替换 mysqli_query($c, $q)
mysql_select_db($db, $c) 替换 mysqli_select_db($c, $db)
mysql_field_name 已弃 解决方案参考:关于如何解决mysqli()没有与之对应mysqli_field_name()问题 - 知乎 mysql_field_name — (mysqli_fetch_field_direct() [name] or [orgname])取得结果中指定字段的字段名
mysql_error 替换 注:mysqli_error(conn) 参数必选mysql_errno 替换 注:mysqli_errno(conn) 参数必选mysql_numrows 替换 mysqli_num_rows
mysql_unbuffered_query 替换 mysqli_query (mysqli_query(“SQL语句”, MYSQLI_USE_RESULT);
)向 MySQL 发送一条 SQL 查询,并不获取和缓存结果的行
其他mysql函数,绝大部分都可以直接批量替换为mysqli相关函数,使用参考mysqli函数文档
mysql_affected_rows() 与 mysqli_affected_rows() 的区别
// MySQL方式 $query = "select * from td_user"; $cursor = exequery($conn, $query); $count0 = mysql_affected_rows(); var_dump($count0); |
// MySQLI方式 $query = "select * from td_user"; $conn = TD::conn(); $cursor = exequery($conn, $query); $count1 = mysqli_num_rows($cursor); var_dump($count1); $count2 = mysqli_affected_rows($conn); var_dump($count2); |
OA升级相关处理
1 建议使用pdo的SQL语法,medoo版本1.6 2 3 参考文档:https://medoo.lvtao.net/1.2/doc.php |
数据库表修改
拆表:
user 改为 td_user
td_user表中的DEPT_ID_OTHER、USER_PRIV_OTHER 转存到user_other中,type=1辅助部门,
type=2辅助角色
department表中的1.部门主管,2:部门助理,3:上级主管领导,4:上级分管领导 转存到
department_manager表中
user_priv表中,角色对应的菜单FUNC_ID_STR,改成一对多存到user_priv_func user_ext表中U_FUNC_ID_STR 用户菜单ID串,改成一对多存到user_ext_func user_function表原来uid对应的user_func_id_str用户菜单id串,改为多条数据形式
注意:
建议非必要不要使用find_in_set函数,性能不好,优先使用 in
表结构字段建议设置为 NOT NULL DEFAULT ''
表属性:
1 表、字段编码均为 utf8_general_ci |
数据库部分数据处理
unserialize 相关数据处理
|
数据库兼容国产化相关处理
日期字段默认值 0000-00-00 判断改为 1000-01-01
时间字段默认值 0000-00-00 00:00:00 判断改为 1000-01-01 00:00:00
timestamp字段默认值 0000-00-00 00:00:00 判断改为 2000-01-01 00:00:00
配置文件说明
OA相关参数:
MYOA/webroot/inc/td_config.php
MYOA/webroot/inc/oa_config.php
|
数据库配置:
MYOA/webroot/inc/db_config.php
//默认连接的数据库 $DB_TYPE = "mysql"; // ['mysql', 'dm', 'kb'] |
$MYSQL_SERVER = "127.0.0.1:3336"; $MYSQL_PORT = "3336"; // ['3336', '5236'] $MYSQL_USER = "oa"; $MYSQL_PASS = "myoa888"; $MYSQL_ROOT_USER = "root"; $MYSQL_ROOT_PASS = "myoa888"; $MYSQL_DB = "TD_OA"; $MYSQL_DB_APP = "TD_APP"; $MYSQL_DB_CRSCELL = "crscell"; $MYSQL_DB_ARCHIVE = "TD_OA_ARCHIVE"; |
Redis相关兼容
1 Redis::delete() 转为 Redis::del() 2 3 Redis::setTimeout() 转为 Redis::EXPIRE() |
PHP新增函数接口
1 获取当前浏览器 |
is_weakpass()
1 检验是否弱密码,true / false |
GetMembersFromDept($DEPT_ID1, $QUERY_MASTER="")
1 获取指定主部门的成员user_id串信息 |
gbk2utf8_unserialize($str)
1 获取根据unserialize的gbk数据信息转为unserialize的utf-8数据信息 |
is_https()
1 获取当前访问是否是https请求,true / false |
td_gzcompress($content, $db_type = 'mysql')
1 获取根据原始内容数据及数据库类型处理后的进制流数据 |
td_gzuncompress($compress_content, $db_type = 'mysql')
1 获取根据数据库中取出的进制流内容数据,针对不通数据库类型处理后的原始内容数据 |
1 获取我能管理的用户信息 2 [['uid' => 1, 'user_id' => 'admin', 'user_name' => '系统管理员'], ...] |
inc/utility_org.php get_manage_user()
GetUserOtherAllByDeptId($DeptIds, $type=0, $return=0)
4 [['uid' => 1, 'user_id' => 'admin'], ...] |
GetUserOtherAllByUserPrivId($UserPrivId, $type=0, $retu
4 [['uid' => 1, 'user_id' => 'admin'], ...] |
GetUserOtherIdByUid($uid, $type=0)
5 ['dept_id_other' => '1,2,3,', 'user_priv_other' => '1,2,3,'] |
medoo相关及语法
|
SQL实例select
$ret = TD::DB()->select(TD::tableFix("url"), "*", [ |
"OR" |
=> [ "AND #first" "URL_TYPE" "USER" ], "AND #second" "URL_TYPE" "USER" ] |
=> [ => '3', => '' |
=> [ => '2', => $_SESSION["LOGIN_USER_ID"] ], "ORDER" => ["URL_NO" => "ASC"] ]); var_dump($ret); 输出结果: array(14) { [0]=> array(8) { ["URL_ID"]=> string(2) "23" ["URL_NO"]=> string(1) "1" ["URL_DESC"]=> string(12) "百度搜索" ["URL"]=> string(16) "http://baidu.com" ["USER"]=> string(0) "" ["URL_TYPE"]=> string(1) "3" ["SUB_TYPE"]=> string(0) "" ["URL_ICON"]=> string(13) "ewp_baidu.png" } [1]=> ... } |
insert
1 TD::DB()->insert(TD::tableFix("im_offline_file"), ['TIME' => date('Y-m-d H:i:s'), 'SRC_UID' => $_SESSION["LOGIN_UID"], ...]); 2 TD::DB()->id(); |
update
1 TD::DB()->update(TD::tableFix("td_user"), ["ON_STATUS" => 1, ...], ["UID" => $_SESSION["LOGIN_UID"]]); |
delete
1 TD::DB()->delete(TD::tableFix("address"),["ADD_ID" => $TOK]); |
count
1 $TOTAL_ITEMS = TD::DB()->count(TD::tableFix('im_offline_file'),['DEST_UID' => $_SESSION["LOGIN_UID"]]); |
prepareQuery
|
debug
|
更多参考:中文文档-中文帮助手册-Medoo - 高效的轻量级PHP数据库框架, 提高开发效率!
存储: $compress_content = bin2hex(gzcompress($content)); $compress_content = '0x'.$compress_content; |
获取: $compress_content |
= gzuncompress($ret_test[0]['compress_content']); |
富文本内容压缩存储
各数据库有关blob处理
MySQL blob处理
DM blob处理
存储: $compress_content = bin2hex(gzcompress($content)); |
// SQL中 '0x' 可加可不加,达梦会自动转十六进制 $compress_content = '0x'.$compress_content; 或者使用 TO_BLOB 函数处理 获取: $compress_content3 = @gzuncompress(hex2bin($ret_test[0] ['compress_content'])); |
KB blob处理
存储: $compress_content = bin2hex(gzcompress($content)); $compress_content = "x'".$compress_content."'"; |
获取: SELECT "COMPRESS_CONTENT"::BYTEA FROM "test_blob" WHERE id=1146; |
|
业务代码使用
新增 & 修改
include_once("inc/utility_all.php"); $COMPRESS_CONTENT = td_gzcompress($CONTENT); |
// 方法一:推荐 TD::DB()->insert('news', [ "COMPRESS_CONTENT[BLOB]" => $COMPRESS_CONTENT // 注:变量不需要使用引号处理 ]); |
// 方法二: $query = "insert into news (`COMPRESS_CONTENT`) values ($COMPRESS_CONTENT);"; // 注:变量不需要使用引号处理exequery(TD::conn(), $query); |
// 方法三: $query = "insert into news (`COMPRESS_CONTENT`) values ($COMPRESS_CONTENT);"; // 注:变量不需要使用引号处理TD::DB()->prepareQuery($query); |
查看
|
归档数据库使用
方法一:直接ARCHIVE_DB连接数据库型 (推荐使用)
|
方法二:DB函数重连数据库型
|
方法三:复杂SQL型
|
方法四:mysqli连接数据库型
|
方法五:medoo兼容处理型
|
MySQL升级相关
配置文件my.ini修改
[mysql] default-character-set=utf8 |
[mysqld] character-set-server=utf8 skip-ssl # innodb_file_format=Barracuda log_timestamps = SYSTEM # thread_concurrency =8 sql_mode=NO_ENGINE_SUBSTITUTION |
数据库管理工具配置
下载
官网下载phpMyAdmin工具:http://www.phpmyadmin.net,建议下载对应PHP版本的最新的all- language版本(准备工作文件已经给提供)
解压缩
在MYOA\webroot目录下新建一个目录,如mysql369(为了防止他人利用该工具侵入数据库系统,可把 目录名设为比较复杂的,如MySQL2345,避免目录名被猜测到。),将下载的程序包解压后拷贝至mysql369目录下
修改配置文件
用文本编辑器,如记事本,打开MySQL管理工具目录,复制config.sample.inc.php文件并改名为
confing.inc.php,打开后修改以下配置信息:
$cfg['blowfish_secret'] = ''; //随便输入一个字符串,加密Cookie等信息
$cfg['Servers'][$i]['auth_type'] = 'http'; //http,config,cookie,建议使用http
$cfg['Servers'][$i]['host'] = 'localhost'; //数据库地址,默认为localhost
$cfg['Servers'][$i]['port'] = '3336'; //数据库端口,默认为3336
$cfg['Servers'][$i]['user'] = 'root'; //数据库用户名,默认为root
$cfg['Servers'][$i]['password'] = ''; //数据库密码,默认为myoa888
技术支持 QQ2524837118
使用phpMyAdmin
MySQL管理工具地址:http://OA地址/mysql1369,注意,进入后先选择中文界面(中文-Chinese simplified )。该管理工具的使用需具有一定数据库基础,请勿进行危险操作,以免导致数据丢失
注:也可使用其他的数据库管理工具,如Navicat等
MySQL升级遇到问题汇总
问题一:mysql5.7 BLOB, TEXT, GEOMETRY or JSON column 'user_str' can't have a default value
|