在xiaoCMS官网http://www.xiaocms.com/x1/中的后台框架中,有这几个版本:
其中mysql版的数据库使用mysql,支持大型数据处理;而sqllite版的数据库文件只支持很小的数据处理,一般正式的网站都是不允许使用sqllite的,以避免日后数据量增加带来的困扰。如果自己一不小心下载到了sqllite版,也没有关系,因为mysql和sqllite版数据库文件只在core文件夹中区别,要修改时只需将core文件替换成自己想要的版本就ok了。
不要忘了数据库配置文件database.ini.php将她指向自己的mysql,具体内容如下:
if (!defined('IN_XIAOCMS')) exit();
return array (
'host' => '127.0.0.1', //连接本机测试
'username' => 'root', //数据库用户名
'password' => '', //密码
'dbname' => 'xiaocms', //数据库名
'prefix' => 'xiao_', //数据表前缀
'port' => '3306', //mysql端口号
'charset' => 'utf8', //编码格式
);
而如何将sqllite数据库转成mysql,我是没有找到合适的方法,有很多人推荐SQLLiteManager和sqlliteStudio,但是我真的是不会用,最后只能在sqlliteStudio中浏览,再在mysql中建出一模一样的表。
连接数据库,输入自己的sqllite数据库打开,如下图:
此时就会出现各数据表以及表的结构、数据等
点击“DDL”,里面有对应表的sql语句,使用它就可以轻松建表
建表后出现表结构,在点击“数据”,里面会有表中的具体数据了,照着新建就好了
在更改数据库时,遇到了很多问题,但是经过我的不懈努力,最后都一一解决了,希望你们也有同样的耐心和好运气。
在这里,还要着重感谢一下我的工作上的前辈们,谢先森和王先森。我的编程之路上因为有你们顺畅了许多。
Fatal error: Uncaught Error: Function name must be a string in D:\Documents\tohu\core\controller\Base.class.php:180 Stack trace: #0 D:\Documents\tohu\admin\controller\content.php(156): Base->get_data_fields(Array, Array) #1 D:\Documents\tohu\core\xiaocms.php(68): content->editAction() #2 D:\Documents\tohu\admin\index.php(11): xiaocms::run() #3 {main} thrown in D:\Documents\tohu\core\controller\Base.class.php on line 180
分析:调试运行发现是下面这部分代码的问题
if (method_exists($field, $t['formtype']))
$data_fields .= $field->$t['formtype']($t['field'], $content, $t['setting']);
$data_fields .= ($t['tips'] ? '' . $t['tips'] . '' : '') . ''; //控制错误提示内容
解决办法:
if (!method_exists($field, $t['formtype']))
$data_fields .= $field->$t['formtype']($t['field'], $content, $t['setting']);
$data_fields .= ($t['tips'] ? '' . $t['tips'] . '' : '') . '';
Fatal error:Uncaught ArgumentCountError:Too few arguments to function uploadfile:upload(),2 passed in
D:\Documents\tohu\admin\controller\uploadfile.php on line 182 and exactly 3 expected in
D:\Documents\tohu\admin\controller\uploadfile.php:194 Stack trace:#0
D:\Documents\tohu\admin\controller\uploadfile.php(182):upload('imgFile',Array)#1
D:\Documents\tohu\core\xiaocms.php(68):uploadfile->kindeditor_uploadAction()#2
D:\Documents\tohu\admin\index.php(11):xiaocms:run() #3 (main)thrown in
D:\Documents\tohu\admin\controller\uploadfile.php on line 194
解决方案:
修改D:\Documentstohu\admin\uploadfile.php中的编辑器上传函数kindeditor_uploadAction(),如下:
/**
* 编辑器上传
*/
public function kindeditor_uploadAction() {
$ext_arr = array(
'image' => array('gif', 'jpg', 'jpeg', 'png', 'bmp'),
'flash' => array('swf', 'flv'),
'media' => array('swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'),
'file' => array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2'),
);
$dir_name = $this->get('dir') ? $this->get('dir') : 'image';
if (empty($ext_arr[$dir_name])) {
echo json_encode(array('error' => 1, 'message' => '目录名不正确。'));
exit;
}
$data = $this->upload('imgFile', $ext_arr[$dir_name],100); //upload()方法少了第三个参数,此参数代表要上传文件的大小,是必须的。
if (!$data['result']) {
echo json_encode(array('error' => 1, 'message' => ''));exit;
} else {
echo json_encode(array('error' => 0, 'url' => $data['path']));exit;
}
}
注:虽然这里规定了上传文件的最大值,但是具体的参数还要受到xampp本身配置文件的限制。
Fatal error:Uncaught PDOException:SQLSTATE[23000];Integrity constraint violation:1062 Duplicate entry '0' for key 'PRIMARY' in D:\Documents\tohu\core\library\dbpdo.class.php:57 Stack trace:#0
D:\Documents\tohu\core\library\dbpdo.class.php(57):PDOStatement->execute(Array) #1 D:\Document\tohu\core\library\dbpdi.class.php(162):dbpdo->execute('INSERTINTOxia...',Array)#2
D:\Documents\tohu\core\library\Model.class.php(90):dbpdo->indert('xiao_content',Array,true) #3 D:\Documents\tohu\core\admin\controller\content.php(105):Model->insert(true) #4
D:\Documents\tohu\core\xiaocms.php(67):content->addAction() #5 D:\Documents\tohu\admin\index.php(11):xiaocms:run() #6(main) throw in D:\Documents\tohu\core\library\dbpdodo.class.php on line 57
分析:这是由于在数据表xiao_content中,主键id没有设置自增属性,导致插入的数据有误。
解决方案:修改数据表中的对应字段id,将其设为自增。
注意:在主键值有“0”的情况下,是不能给主键设置自增属性的,错误号如下:
需要将主键为“0”的值先修改为与其他主键不一致的值后,才能修改。修改完成后再将此项的主键值修改成自己想要的即可。