你现在的位置:首页 > PHP网站建设知识库 > Joomla > 正文

浅谈 Joomla! 的数据库访问

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+文件名组成,否则等下会提示找不到文件。在类里你必须常见数据库表中相同的字段变量。 如果有的字段默认值不为空,比如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!中的数据库操作大致如此,相信这些已经能够解决大部分的问题。