论文部分内容阅读
[摘要]数据是Joomla!开发应用中重要的一环,可以说,网站终归是将数据有效的展示给用户,因而与数据库连接,有效的返回数据是Joomla!开发基础环节。
[关键词]开源 Joomla! 数据库
中图分类号:TP3 文献标识码:B 文章编号:1671-7597(2008)1220060-02
一、引言
Joomla!是一套获得过多个奖项的内容管理系统(Content Management System,CMS)。Joomla!采用PHP+MySQL数据库开发,可运行在Linux、Windows、MacOSX、Solaris等各种平台上。Joomla!除了具有新闻/文章管理,文档/图片管理,网站布局设置,模板/主题管理等一些基本功能之外。还可通过其提供的上千个插件进行功能扩展包括:电子商务与购物车引擎,论坛与聊天软件,日历,博客软件,目录分类管理,广告管理系统,电子报,数据收集与报表工具,期刊订阅服务等。
Joomla是web程序,因此必须上传到服务器才能运行。如果要在自己的个人电脑(PC)上尝试Joomla,你必须在你的电脑上建立一个本地测试服务器。又由于Joomla使用php语言,因此你的服务器必须是php空间。Joomla的运行还离不开SQL数据库,因此你的服务器上必须拥有mysql。最能发挥其性能的是Linux+apache+php+MySQL平台。
数据是Joomla!开发中重要的一环,可以说,网站终归是将数据有效的展示给用户,因而与数据库连接,有效的返回数据是Joomla!开发基础环节。
二、Joomla!数据库相关类基础知识
(一)JDatabase 类
这是数据库connector类,封装了与数据库操作的一系列操作。目前有两个子类,JDatabaseMysql,JDatabaseMysqli,这个类为以后扩展到其他数据库留出了接口。
关于一些具体函数基本对应mysql函数的一些特征,对于这个类应用基本都是首先setquery,然后load或者直接执行executequery,主要还是不要混淆load开头的几个函数的具体功能:
1、loadObject 以对象的形式返回结果集的第一行数据。
2、loadObjectList 对应上一个函数,返回一个对象的集合。
3、loadResult 返回第一行的第一个字段或者NULL。
4、loadResultArray 返回某一字段的数据到一个数组中。
5、loadRow 返回第一行数据,应该是数组形式。
6、loadRowList 对应上一个函数,返回行数据的集合。
还有一个函数很重要就是setutf ,这个函数决定了数据库是否能正确的显示中文。
(二)JTable类
JTable 是数据库中数据表在程序中的表达,对应着表中的一行,以及相应的操作。Joomla中的JTable**对应中数据库中**表,在使用的时候要针对自己所使用的表扩展自己的Jtable。需要关注的是JTable的函数checkin,checkout ,这两个函数对更新的数据进行合法性检查。
Jtable 比较常用的函数:delete,store,bind,load,setError等。
三、Joomla!数据开发应用
(一)组件开发中使用数据库
1.使用JDatabase类
Joomla!设计能使用几种数据库系统。JDatabase类自动创建数据库链接,仅要两行代码就可以从数据库返回不同格式的结果。采用Joomla数据库层确保了最大限度的灵活和兼容。
2.数据库查询
$db = JFactory::getDBO();// 获取数据库对象
$query = "SELECT * FROM #__example_table WHERE id = 999999";
$db->setQuery($query);
首先我们初始化数据库对象,然后我们准备查询语句。可以使用通常的sql语法,唯一需要改变的是表前缀。为了使尽可能的灵活,Joomla为前缀采用了一个占位符 #__,接下来是setQuery()。
如果不是为了从数据库返回信息,而是插入一行数据,就需要使用更多的函数。为了是sql语句符合sql语法,我们需要使用Quote,保证每一个value都由了引号包含。无论你想做什么,都需要setQuery()
3.执行查询
Joomla提供几个不同的函数,它们有不同的返回值。 基本查询函数:query、getAffectedRows、explain、insertid、insertObject
4.返回结果集
loadResult //返回第一行,第一个字段
loadObject //返回第一行
loadRow //返回数组,第一行
loadResultArray、loadObjectList //返回多行row对象
loadRowList //返回多维数组
loadAssocList //散列数组
(二)Joomla开发中连接外部数据库
如果需要访问的数据不在Joomla使用的数据库中,怎样访问外部数据库?这个数据库可能是同一台机器上的不同数据库,或者根本就不在同一台服务器上,甚至可能不是mysql数据库而需要其他的数据库驱动。你可以通过JDatabase::getInstance方法而达到你的目的。下面是一个连接外部数据库的例子:
<?php
$option['driver']= 'mysql';// 数据库驱动
$option['host'] = 'db.myhost.com';// 数据库所在的主机
$option['user']= 'username'; // 用户
$option['password'] = '*******'; // 密码
$option['database'] = 'databasename'; // 数据库名字
$option['prefix']= 'abc_'; // 数据库前缀(可以为空)
$db = & JDatabase::getInstance( $option );
?>
现在得到的$db是一个 JDatabase的实例,你可以执行通常的数据库操作。
如果数据库用了一个非标准的端口,你可以通过在主机名添加来指定,例如,如果你的mysql数据库在3307端口运行,那么你这样指定 'db.myhost.com:3307'。这样做的一个好处是如果参数相同,再次调用JDat
Abase::getInstance将得到前次已经生成的JDatabase的实例,而不是新生成一个。但是,参数必须完全相同。比如,如果你一次调用主机名是'db.my
Host.com',而另一次调用是'db.myhost.com:3306',那么这时候将产生两个不同的JDatabase的实例,即使这两个主机实际上是相同的。
四、Joomla!数据库表结构以及优化
(一)Joomla数据库文章保存表jos_content
jos_content可以说是Joomla数据库的核心表,数据字段的涉及范围够用了,但是仔细查看后,觉得有几点设计不够合理,这些问题将导致Joomla 采用mysql数据库将不能支撑大数据量的查询,也就是说,Joomla想要支撑大数据量,还有很长的路走,包括数据结构优化,查询语句优化,缓存设计优化。
1、文章正文,文章简介与文章的其他的信心混合在一起,这将导致大数据量情况下,表将很大,对于查询性能是个拖累,这也是lifetype中将content表和content_text表分开的原因。
2、文章点击也混合在一起,点击是一个频繁操作的动作,尤其对于myisa存储引擎,锁表将造成查询的性能大为下降,对于访问频繁的网站这是一个大的问题。
3、created_by_alias未能有效利用。
(二)Joomla数据库中几个重要的数据表
1. 文章分类相关的两个表:
jos_categories //子类
jos_sections//类,
两者之间是一对多关系,一个section可以有多个category。
Joomla的组件,模块,插件的数据保存表 jos_components、jos_modules、jos_plugins。
了解这几个表也很重要,比如可以在安装了某个插件并启用后,突然所有页面都不能访问了,这时候就可以进入数据库,更新刚安装插件的 publish字段为0 ,通常就可以恢复了。
2. 文章保存数据表
jos_content
3. 用户,以及登录相关表
jos_groups、jos_session、jos_users
4. 菜单表
jos_menu
五、Joomla!数据库迁移,备份
(一)Joomla 数据库如何转换字符集到utf-8
原来的字符集为latin1,升级成为utf8的字符集。原来的表:old_tab
le(default charset=latin1),新表: new_table(default charset=utf8)。
第一步:导出旧数据
mysqldump --default-character-set=latin1 -hlocalhost -uroot -B my_db --tables old_table > old.sql
第二步:转换编码
iconv -t utf-8 -f gb2312 -c old.sql > new.sql
或者可以去掉 -f 参数,让iconv自动判断原来的字符集
iconv -t utf-8 -c old.sql > new.sql
第三步:导入
修改old.sql,在插入/更新语句开始之前,增加一条sql语句: "SET NAMES utf8;",保存。
mysql -hlocalhost -uroot my_db < new.sql
(二)Joomla!数据库备份组件 Mysql Dumper
SQL Dumper是备份MySQL数据库简单的解决办法,操作简单,高度安全。不管到底有多大的数据库你想导入或导出,都不存在困难。注:所有的文件都是保存在administrator/backups/文件夹。如果你想要恢复数据库,备份的sql文件也在这个目录。
六、结束语
Joomla!作为一个内容管理系统,利用它来建站和制作传统的静态网站不同,它大大降低了建站的难度,我们不需要太多的网站建设专业知识就可以快速的建立一个网站。并且后期网站的管理和维护也非常的方便。对于个人用户和中小型企业来说,一个网站具有内容管理、文章发布、用户注册、产品展示等功能就已足够,如果需要论坛、 留言板、相册等功能,可以从互联网下载相应的扩展程序在Joomla!安装并设置好就可以使用了。
参考文献:
[1]武欣、邵煜等译,《PHP和MySQL Web开发》(第三版) Luke Welling、Laura Thomson 著,机械工业出版社,2005.6.
[2]刘振岩、王勇等,《基于Linux的Web程序设计》,人民邮电出版社,2008.2.
[3]杜江,《PHP 5与MySQL 5 Web 开发技术详解》,电子工业出版社,2007.11.
[4]秦涛等,《精通PHP5应用开发》,人民邮电出版社,2007.5.
[5](奥)科夫勒著,杨晓云等译,《MySQL 5权威指南》(第3版),2006.12.
作者简介:
钱兆楼,男,汉,江苏沭阳,淮安信息职业技术学院计算机科学与工程系,硕士研究,中级,主要研究方向:计算机软件、网络。
[关键词]开源 Joomla! 数据库
中图分类号:TP3 文献标识码:B 文章编号:1671-7597(2008)1220060-02
一、引言
Joomla!是一套获得过多个奖项的内容管理系统(Content Management System,CMS)。Joomla!采用PHP+MySQL数据库开发,可运行在Linux、Windows、MacOSX、Solaris等各种平台上。Joomla!除了具有新闻/文章管理,文档/图片管理,网站布局设置,模板/主题管理等一些基本功能之外。还可通过其提供的上千个插件进行功能扩展包括:电子商务与购物车引擎,论坛与聊天软件,日历,博客软件,目录分类管理,广告管理系统,电子报,数据收集与报表工具,期刊订阅服务等。
Joomla是web程序,因此必须上传到服务器才能运行。如果要在自己的个人电脑(PC)上尝试Joomla,你必须在你的电脑上建立一个本地测试服务器。又由于Joomla使用php语言,因此你的服务器必须是php空间。Joomla的运行还离不开SQL数据库,因此你的服务器上必须拥有mysql。最能发挥其性能的是Linux+apache+php+MySQL平台。
数据是Joomla!开发中重要的一环,可以说,网站终归是将数据有效的展示给用户,因而与数据库连接,有效的返回数据是Joomla!开发基础环节。
二、Joomla!数据库相关类基础知识
(一)JDatabase 类
这是数据库connector类,封装了与数据库操作的一系列操作。目前有两个子类,JDatabaseMysql,JDatabaseMysqli,这个类为以后扩展到其他数据库留出了接口。
关于一些具体函数基本对应mysql函数的一些特征,对于这个类应用基本都是首先setquery,然后load或者直接执行executequery,主要还是不要混淆load开头的几个函数的具体功能:
1、loadObject 以对象的形式返回结果集的第一行数据。
2、loadObjectList 对应上一个函数,返回一个对象的集合。
3、loadResult 返回第一行的第一个字段或者NULL。
4、loadResultArray 返回某一字段的数据到一个数组中。
5、loadRow 返回第一行数据,应该是数组形式。
6、loadRowList 对应上一个函数,返回行数据的集合。
还有一个函数很重要就是setutf ,这个函数决定了数据库是否能正确的显示中文。
(二)JTable类
JTable 是数据库中数据表在程序中的表达,对应着表中的一行,以及相应的操作。Joomla中的JTable**对应中数据库中**表,在使用的时候要针对自己所使用的表扩展自己的Jtable。需要关注的是JTable的函数checkin,checkout ,这两个函数对更新的数据进行合法性检查。
Jtable 比较常用的函数:delete,store,bind,load,setError等。
三、Joomla!数据开发应用
(一)组件开发中使用数据库
1.使用JDatabase类
Joomla!设计能使用几种数据库系统。JDatabase类自动创建数据库链接,仅要两行代码就可以从数据库返回不同格式的结果。采用Joomla数据库层确保了最大限度的灵活和兼容。
2.数据库查询
$db = JFactory::getDBO();// 获取数据库对象
$query = "SELECT * FROM #__example_table WHERE id = 999999";
$db->setQuery($query);
首先我们初始化数据库对象,然后我们准备查询语句。可以使用通常的sql语法,唯一需要改变的是表前缀。为了使尽可能的灵活,Joomla为前缀采用了一个占位符 #__,接下来是setQuery()。
如果不是为了从数据库返回信息,而是插入一行数据,就需要使用更多的函数。为了是sql语句符合sql语法,我们需要使用Quote,保证每一个value都由了引号包含。无论你想做什么,都需要setQuery()
3.执行查询
Joomla提供几个不同的函数,它们有不同的返回值。 基本查询函数:query、getAffectedRows、explain、insertid、insertObject
4.返回结果集
loadResult //返回第一行,第一个字段
loadObject //返回第一行
loadRow //返回数组,第一行
loadResultArray、loadObjectList //返回多行row对象
loadRowList //返回多维数组
loadAssocList //散列数组
(二)Joomla开发中连接外部数据库
如果需要访问的数据不在Joomla使用的数据库中,怎样访问外部数据库?这个数据库可能是同一台机器上的不同数据库,或者根本就不在同一台服务器上,甚至可能不是mysql数据库而需要其他的数据库驱动。你可以通过JDatabase::getInstance方法而达到你的目的。下面是一个连接外部数据库的例子:
<?php
$option['driver']= 'mysql';// 数据库驱动
$option['host'] = 'db.myhost.com';// 数据库所在的主机
$option['user']= 'username'; // 用户
$option['password'] = '*******'; // 密码
$option['database'] = 'databasename'; // 数据库名字
$option['prefix']= 'abc_'; // 数据库前缀(可以为空)
$db = & JDatabase::getInstance( $option );
?>
现在得到的$db是一个 JDatabase的实例,你可以执行通常的数据库操作。
如果数据库用了一个非标准的端口,你可以通过在主机名添加来指定,例如,如果你的mysql数据库在3307端口运行,那么你这样指定 'db.myhost.com:3307'。这样做的一个好处是如果参数相同,再次调用JDat
Abase::getInstance将得到前次已经生成的JDatabase的实例,而不是新生成一个。但是,参数必须完全相同。比如,如果你一次调用主机名是'db.my
Host.com',而另一次调用是'db.myhost.com:3306',那么这时候将产生两个不同的JDatabase的实例,即使这两个主机实际上是相同的。
四、Joomla!数据库表结构以及优化
(一)Joomla数据库文章保存表jos_content
jos_content可以说是Joomla数据库的核心表,数据字段的涉及范围够用了,但是仔细查看后,觉得有几点设计不够合理,这些问题将导致Joomla 采用mysql数据库将不能支撑大数据量的查询,也就是说,Joomla想要支撑大数据量,还有很长的路走,包括数据结构优化,查询语句优化,缓存设计优化。
1、文章正文,文章简介与文章的其他的信心混合在一起,这将导致大数据量情况下,表将很大,对于查询性能是个拖累,这也是lifetype中将content表和content_text表分开的原因。
2、文章点击也混合在一起,点击是一个频繁操作的动作,尤其对于myisa存储引擎,锁表将造成查询的性能大为下降,对于访问频繁的网站这是一个大的问题。
3、created_by_alias未能有效利用。
(二)Joomla数据库中几个重要的数据表
1. 文章分类相关的两个表:
jos_categories //子类
jos_sections//类,
两者之间是一对多关系,一个section可以有多个category。
Joomla的组件,模块,插件的数据保存表 jos_components、jos_modules、jos_plugins。
了解这几个表也很重要,比如可以在安装了某个插件并启用后,突然所有页面都不能访问了,这时候就可以进入数据库,更新刚安装插件的 publish字段为0 ,通常就可以恢复了。
2. 文章保存数据表
jos_content
3. 用户,以及登录相关表
jos_groups、jos_session、jos_users
4. 菜单表
jos_menu
五、Joomla!数据库迁移,备份
(一)Joomla 数据库如何转换字符集到utf-8
原来的字符集为latin1,升级成为utf8的字符集。原来的表:old_tab
le(default charset=latin1),新表: new_table(default charset=utf8)。
第一步:导出旧数据
mysqldump --default-character-set=latin1 -hlocalhost -uroot -B my_db --tables old_table > old.sql
第二步:转换编码
iconv -t utf-8 -f gb2312 -c old.sql > new.sql
或者可以去掉 -f 参数,让iconv自动判断原来的字符集
iconv -t utf-8 -c old.sql > new.sql
第三步:导入
修改old.sql,在插入/更新语句开始之前,增加一条sql语句: "SET NAMES utf8;",保存。
mysql -hlocalhost -uroot my_db < new.sql
(二)Joomla!数据库备份组件 Mysql Dumper
SQL Dumper是备份MySQL数据库简单的解决办法,操作简单,高度安全。不管到底有多大的数据库你想导入或导出,都不存在困难。注:所有的文件都是保存在administrator/backups/文件夹。如果你想要恢复数据库,备份的sql文件也在这个目录。
六、结束语
Joomla!作为一个内容管理系统,利用它来建站和制作传统的静态网站不同,它大大降低了建站的难度,我们不需要太多的网站建设专业知识就可以快速的建立一个网站。并且后期网站的管理和维护也非常的方便。对于个人用户和中小型企业来说,一个网站具有内容管理、文章发布、用户注册、产品展示等功能就已足够,如果需要论坛、 留言板、相册等功能,可以从互联网下载相应的扩展程序在Joomla!安装并设置好就可以使用了。
参考文献:
[1]武欣、邵煜等译,《PHP和MySQL Web开发》(第三版) Luke Welling、Laura Thomson 著,机械工业出版社,2005.6.
[2]刘振岩、王勇等,《基于Linux的Web程序设计》,人民邮电出版社,2008.2.
[3]杜江,《PHP 5与MySQL 5 Web 开发技术详解》,电子工业出版社,2007.11.
[4]秦涛等,《精通PHP5应用开发》,人民邮电出版社,2007.5.
[5](奥)科夫勒著,杨晓云等译,《MySQL 5权威指南》(第3版),2006.12.
作者简介:
钱兆楼,男,汉,江苏沭阳,淮安信息职业技术学院计算机科学与工程系,硕士研究,中级,主要研究方向:计算机软件、网络。