浅谈 Joomla! 的数据库访问
作者:yangqi
周五, 2008年 10月 10日 20:36
Joomla!中数据库操作主要分为两类,第一种是基于 JTable 的,第二种则是基于 JFactory::getDBO() 的。两者各有优缺点,看个人的喜好了。如果你不太懂SQL语句,那么JTable可能更加适合你,因为它的执行不需要你提供任何SQL语句(以下会介绍)。
下面开始正式操作了哦,首先在你的 Joomla! 根目录下的 components 文件夹下创建一个名为 com_db 的文件夹(这就是我们要创建的简单组件了),在其中创建名为 db.php 的文件,输入代码 <?echo "<h3>Hi,this is a testing component for database </h3>"?>
由于我在本地调试,所以 在浏览器中输入 http://localhost/joomla/index.php?option=com_db 可以看见输出文字,说明第一步已经搞定了。
在数据库中创建表 jos_db ,如果你安装了 phpMyAdmin 等工具,将更加方便.SQL语句如下
CREATE TABLE `jos_db` (
`id` INT( 2 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 20 ) NOT NULL ,
`comment` VARCHAR( 20 ) NOT NULL
)
接着随便在其中插入几条记录以方便操作。
下面开始数据库操作。
一 基于getDbo
先从简单的查询讲起。
a)查询
$db=& JFactory::getDBO();
$query='SELECT * FROM #__db';
$db->setQuery($query);
$result=$db->loadObjectList();
foreach($result as $row)
{
echo ' id is '.$row->id.' name is ' . $row->name .' comment is '.$row->comment.'<br />';
}
你必须先通过 $db=& JFactory::getDBO(); 获得数据库操作对象,然后设置查询语句,接着通过 loadObjectList() 载入结果集。
当你的查询结果只有一个时,你也可以使用 loadResult()函数。
之所以使用#__的原因是,Joomla!会自动将其替换为你所设定的数据库前缀。
b)插入和删除
插入可以通过两种方法来,一种比较简单的做法如,你先将要插入的数据库对象复制,比如你要插入一条新的记录,赋值如下
$rowx->name="insert";
$rowx->comment="test insert";
这里由于设置了 id 为自动增长,所以你可以不给它值。
然后调用函数 $db->insertObject('#__db',&$rowx,'');插入。
另一种方法的原理和删除类似,都是调用了 Execute($querys) 这个方法。先来讲插入的。
我们给个插入的sql语句
$querys="INSERT INTO `joomla`.`#__db` (
`id` ,`name` ,`comment`)
VALUES (
NULL , 'execute', 'test execute'
); ";
然后调用函数,$db->Execute($querys); 即可。
同样的,删除记录你也可以执行相应的删除语句。此处略。
二 基于 JTable
下面将会讲述如何利用JTable来实现数据库操作,要使用 JTable 你必须在刚才创建的com_db目录下,新建一个名为 tables 的文件夹,在里面创建名为 jt.php的文件(文件名可以随意)。然后在里面插入如下代码。
<?php
defined('_JEXEC') or die();
class TableJt extends JTable{
var $id;
var $name ;
var $comment;
function __construct(&$db)
{
parent::__construct( '#__db', 'id', $db );
}
}
?>
其中类名必须以 Table+文件名组成,否则等下会提示找不到文件,还要创建tables目录。在类里你必须常见数据库表中相同的字段变量。 如果有的字段默认值不为空,比如name默认为"a"的话,那么你的$name也应该给它赋值为 a 。构造函数中第一个参数代表所属的表名称。第二个则是下一步查询所需的关键字,比如等下你希望查询 id=1的记录,那么你最好将它设置为 id ,如果你要查询 name="yangqi"的记录,则将它设为 name。
好了,我们可以正常使用Jtable了,在刚才的db.php中继续增加代码。
先要包含该JTable类的文件 JTable::addIncludePath(JPATH_COMPONENT.DS.'tables');
然后获得一个实例 $row=& JTable::getINstance('jt','Table');
a)查询
查询一个 id 为 3的记录
$id=3;
$row->load($id);
echo $row->name;
echo $row->id;
echo $row->comment;
b)插入和删除
要插入一条记录,你先得给它赋值,比如我们赋值如:
$row->name="jtable";
$row->comment="using jtable";
然后调用store()函数 $row->store();
删除是搜索的反方法,通过 $row->delete($id); 实现。
Joomla!中的数据库操作大致如此,相信这些已经能够解决大部分的问题。
若有什么错误的地方欢迎批评指正!你可以在这里下载 com_db 的源代码包
杨期 转载请注明出处。http://www.joomla.cn
[精通Joomla开发]核心数据库之六JTable使用
作者: Administrator
2009-03-16
Joomla提供给我们功能强大的JTable抽象类,使用这个类我们可以进行一些数据库的基本功能操作。对于每个我们想要使用JTable类来操作的表,我们都需要创建一个JTable的子类。
当创建JTable子类的时候,我们需要遵循一些具体的约定或者规则。这些规则方便我们很容易的将我们自己的扩展集成到Joomla或者Joomla框架中。
假如我们创建一个组件,我们需要在该组件的后台管理目录(administrator/components/该组件目录)下的tables目录里创建一个JTable子类.类名就是数据库表实体名加上Table,而类文件的名称就是数据库表实体名。(如果还不清楚翻开他的核心组件比如com_contact自己仔细看)
我们将使用我们之前教程中定义的表结构来演示我们是如何通过JTable类来连接数据库表的。在我们继续之前你得熟悉一下http://www.joomlar.cn/website/content/view/178/1/文章中介绍的数据库表结构
类名是TableFoobar,定位在JPATH_COMPONENT_ADMINISTRATOR.DS.'tables'.DS.'foobar.php'文件中,DS这里是一个全局变量替换了符号“/”,我们首先要做的就是在我们的类文件中定义公共属性或者说是公有变量,这些公共属性与数据库字段(field)直接相关,必须使用相同的名字。我们使用这些公有变量作为一个缓冲区(buffer)来存储个别数据。(理解起来有点困难,可以这样理解数据库的数据会直接拿来填充这些公有变量,我们操作也是操作这些公有变量,如何影响到数据库是靠JTable一些内部的机制)
第二件事情就是我们要定义一个构造函数,为了使用JTable::getInstance()方法,我们需要在我们的子类中使用一个单例引用的数据库对象来覆写基类的构造函数
第三件事情就是我们要覆写check()方法,该方法提供了对属性缓冲区的验证检查并返回一个布尔值结果,如果check()失败,我们就要调用setError()来设置一段消息来提示为什么验证检查失败了。
/**
* #__myextenstion_foobars table handler
*
*/
class TableFoobar extends JTable
{
/** @var int Primary key */
var $id = null;
/** @var string Content */
var $content = null;
/** @var int Checked-out owner */
var $checked_out = null;
/** @var string Checked-out time */
var $checked_out_time = null;
/** @var string Parameters */
var $params = null;
/** @var int Order position */
var $ordering = null;
/** @var int Number of views */
var $hits = null;
/**
* Constructor
*
* @param database Database object
*/
function __construct( &$db )
{
parent::__construct('#__myextension_foobars', 'id', $db);
}
/**
* Validation
*
* @return boolean True if buffer is valid
*/
function check()
{
if(!$this->content)
{
$this->setError(JText::_('Your Foobar must contain some
content'));
return false;
}
return true;
}
}
上面就是一个完整的JTable类文件,接下去我们要做什么,很明显我们要实例化这个对象,使用静态化方法JTable::getInstance(),完整代码如下:
JTable::addIncludePath(JPATH_COMPONENT_ADMINISTRATOR.DS.'tables');
$table = JTable::getInstance('foobar', 'Table');
我们没有直接去包含一个文件,而是包含了整个tables目录,但JTable要去实例化TableFoobar对象的时候,如果类没有定义它就会从包含路径的所有文件中寻找名为foobar.php的文件
本节讲述JTable文件的构成使用,下节介绍CRUD自动化操作当然是基于JTable的。
分享到:
相关推荐
Joomla! is one of the most popular open source Content Management Systems, actively developed and supported by a world-wide user community. It’s a free, fun, and feature-rich tool for anyone who ...
Joomla! A User's Guide: Building a Successful Joomla! Powered Website中文版。 入门书籍。网友翻译。 关于本书 对于Joomla! 这个流行的、屡获大奖的开源CMS,本教程会教你用Joomla按你自己需求一步一步,最终...
6. **数据库交互**:Joomla! 使用MySQL作为默认数据库,开发者应熟悉SQL语句以及如何通过PHP的JDatabase类进行数据库操作。 7. **国际化与本地化**:Joomla! 支持多语言网站,开发者需要了解如何创建和管理语言文件...
### Joomla! Bible 知识点概览 #### 一、Joomla! 概述 - **定义**:Joomla! 是一款开源的内容管理系统(CMS),主要用于构建网站和在线应用程序。它以其灵活性、可扩展性和易用性而闻名,是创建各种规模网站的理想...
- **数据库管理**:阐述了 Joomla! 如何与数据库交互,以及如何备份和恢复数据库。 - **Joomla! 的组成元素**:深入解析了 Joomla! 各个组成部分的功能和作用。 5. **新特性介绍** - **Joomla! 2.5 新特性**:...
【Joomla!建站步步通】是一套专为学习Joomla!内容管理系统(CMS)而设计的视频培训教程。Joomla!是一个开源的、基于PHP的网站构建平台,它允许用户通过直观的用户界面来创建、管理和维护动态网站。本教程涵盖了...
**Joomla! 1.5.6 中文稳定版** Joomla! 是一款全球知名的开源内容管理系统(CMS),用于构建动态网站和管理网页内容。1.5.6 版本是针对1.5系列的一个重要更新,特别是对于中文用户而言,它提供了全面的中文支持,...
访问控制列表(ACL)是Joomla! 的一个重要特性,它允许管理员控制不同用户组对网站内容和功能的访问权限。在组件开发中,我们需定义用户角色和权限,然后在代码中实现这些权限的检查,以决定用户是否可以执行特定...
### Joomla!官方出品权威指南 —— 《The Official Joomla! Book》 #### 一、书籍简介 本书由Joomla!官方推出,旨在为用户提供全面、深入的Joomla!使用指导。该书涵盖了Joomla! 1.6版本的所有功能与特性,并通过...
### Joomla! 1.0.11 用户手册关键知识点概览 #### 一、引言与概述 **标题**:Joomla! 1.0.11 用户手册 **描述**:官方发布的 Joomla! 1.0.11 版本用户手册。 **标签**:Joomla! 1.0.11 用户手册 该手册是 ...
Joomla!是一个非常流行的开源内容管理系统(CMS),它允许用户创建和管理网站和网络应用的复杂内容。Joomla!使用PHP语言和MySQL数据库,广泛应用于网页发布、博客、电子商务等场景。作为开发者,掌握如何使用Joomla!...
### 基于Joomla!内容管理系统的门户网站建设 #### 1. 引言与背景 Joomla!作为一款流行的开源内容管理系统(Content Management System, CMS),以其强大的功能、灵活的扩展性和用户友好的界面,成为了许多企业和组织...
《Joomla! 1.5 Top Extensions Cookbook》是一本针对Joomla! 1.5版本的扩展开发指南,旨在帮助用户充分利用这个流行的开源CMS(内容管理系统)的强大功能。Joomla!是一个灵活且功能丰富的平台,允许用户创建各种类型...
### Joomla! 模板设计知识点解析 #### 一、引言 Joomla! 是一个流行的开源内容管理系统(CMS),被广泛应用于网站构建与管理。本书《Joomla! Template Design》旨在帮助网页设计师们掌握创建专业品质模板的方法。...
Joomla!是一个强大的开源内容管理系统(CMS),广泛用于构建各种类型的网站,包括企业网站、新闻门户、电子商务平台等。这个压缩包包含了一系列Joomla!的学习资料,特别适合初学者和那些希望深入理解Joomla!功能的...