$db=& JFactory::getDBO(); !!得到数据库源
$query='SELECT * FROM #__db'; !!提取目标sql语句
$db->setQuery($query); !!执行
$result=$db->loadObjectList(); !!载入结果集
foreach($result as $row)
{
echo ' id is '.$row->id.' name is ' . $row->name .' comment is '.$row->comment.'<br />';
} !!动作
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` (
) 接着随便在其中插入几条记录以方便操作。 下面开始数据库操作。 一 基于getDbo 先从简单的查询讲起。 a)查询 $db=& JFactory::getDBO(); 你必须先通过 $db=& JFactory::getDBO(); 获得数据库操作对象,然后设置查询语句,接着通过 loadObjectList() 载入结果集。 当你的查询结果只有一个时,你也可以使用 loadResult()函数。 之所以使用#__的原因是,Joomla!会自动将其替换为你所设定的数据库前缀。 b)插入和删除 插入可以通过两种方法来,一种比较简单的做法如,你先将要插入的数据库对象复制,比如你要插入一条新的记录,赋值如下 $rowx->name="insert"; 这里由于设置了 id 为自动增长,所以你可以不给它值。 然后调用函数 $db->insertObject('#__db',&$rowx,'');插入。 另一种方法的原理和删除类似,都是调用了 Execute($querys) 这个方法。先来讲插入的。 我们给个插入的sql语句 $querys="INSERT INTO `joomla`.`#__db` ( 然后调用函数,$db->Execute($querys); 即可。 同样的,删除记录你也可以执行相应的删除语句。此处略。 二 基于 JTable 下面将会讲述如何利用JTable来实现数据库操作,要使用 JTable 你必须在刚才创建的com_db目录下,新建一个名为 tables 的文件夹,在里面创建名为 jt.php的文件(文件名可以随意)。然后在里面插入如下代码。 <?php 好了,我们可以正常使用Jtable了,在刚才的db.php中继续增加代码。 先要包含该JTable类的文件 JTable::addIncludePath(JPATH_COMPONENT.DS.'tables'); 然后获得一个实例 $row=& JTable::getINstance('jt','Table'); a)查询 查询一个 id 为 3的记录 $id=3; b)插入和删除 要插入一条记录,你先得给它赋值,比如我们赋值如: $row->name="jtable"; 然后调用store()函数 $row->store(); 删除是搜索的反方法,通过 $row->delete($id); 实现。
$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 />';
}
$rowx->comment="test insert";
`id` ,`name` ,`comment`)
VALUES (
NULL , 'execute', 'test execute'
); ";
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。
$row->load($id);
echo $row->name;
echo $row->id;
echo $row->comment;
$row->comment="using jtable";
`name` VARCHAR( 20 ) NOT NULL ,
`comment` VARCHAR( 20 ) NOT NULL