使用Joomla创建Joomla!从JDatabase开始
上个月,杂志编辑们让我停止为非技术爱好者撰写文章系列,因为他们认为目标已经实现。考虑到更技术性的读者群体,我承担了以下文章。在与西班牙杂志团队讨论撰写文章,以方便开发者访问允许我们使用Joomla构建Joomla的类的文章后,产生了这篇文章的想法。所以,我将尝试为那些已经有些知识……尽管可能还没有他们想要的深度知识……的程序员写作,所有这些Joomla提供的功能都是为了使您的工作更舒适。
我的同事Daniel Hernandez帮助使这篇文章易于阅读和展示,我鼓励他将来为杂志写作,让所有人都能享受他的知识和良好的工作。
让我们直奔主题……今天我们要谈谈JDatabase
PHP允许不同的方式连接和与数据库交互。Joomla!在其API中包含强大的函数,能够提取适合第三方开发的数据库层,允许扩展对新数据库服务器的连接性,同时总体上为开发者提供更大的便捷性和简洁性,使SQL编码更加容易。这避免了在数据库进行任何更改时,必须找到和更改所有实例中的方法。
为此,我们建议使用JDatabase库。这个库允许我们在几行代码中实例化对数据库的调用,而且不需要知道数据库的名称或要使用的表的名称前缀,因为所有这些值都包含在config.php中
$db = JFactory::getDbo();
$query = $db->getQuery(true);
虽然我们使用PHP实例化数据库,但我们必须指定连接数据、要使用的数据库的名称以及完整表的名称:
$host = "host";
$user = "user_name";
$pass = "密码";
$dbname = "数据库名";
$connection = mysqli_connect($host,$user,$pass);
mysqli_select_db($dbname,$connection);
JDatabase 允许的另一个改进是,可以从库本身的功能创建查询链,这些功能相互支持,允许代码的可读性更高,更重要的是,在不影响代码可移植性的情况下隐藏查询语法。
// 实例化连接。
$db = JFactory::getDbo();
// 创建查询对象。
$query = $db->getQuery(true);
// 准备我们插入的列名。
$columns = array('列1', '列2', '列3', '列4');
// 插入值。
$values = array('值1', '值2', '值3', '值4');
// 准备插入查询。
$query
->insert($db->quoteName('#__table_withoutprefix'))
->columns($db->quoteName($columns))
->values(implode(',', $values));
// 使用对象建立查询并执行查询。
$db->setQuery($query);
$db->query();
如果我们使用更简单的方法,也是有效的,我们将完全发送查询的语法。
// 实例化连接。
$db = JFactory::getDbo();
// 创建查询对象。
$query = $db->getQuery(true);
// 准备我们插入的列名。
$columns = array('列1', '列2', '列3', '列4');
// 插入值。
$values = array('值1', '值2', '值3', '值4');
$query = 'INSERT INTO #__table_withoutprefix ('. $columns. ') VALUES('.$values.')' ;
$db->setQuery($query);
$db->query();
Joomla! 3.x 中所做的最强改进之一是实现 SQL 事务,例如 JDatabaseDriver 的 TransactionStart、TransactionCommit 和 TransactionRollback,这些事务始终与数据库引擎兼容。这取代了自 Joomla! 2.5 以来我们使用的方法 queryBatch。
$db = JFactory::getDbo();
try
{
$db->transactionStart();
$query = $db->getQuery(true);
$columns = array('列1', '列2', '列3', '列4');
$values = array('值1', '值2', '值3', '值4');
$query
->insert($db->quoteName('#__table_withoutprefix'))
->columns($db->quoteName($columns))
->values(implode(',', $values));
$db->setQuery($query);
$result = $db->execute();
$db->transactionCommit();
}
catch (Exception $e)
{
//捕获错误并执行执行回滚。
$db->transactionRollback();
JErrorPage::render($e);
}
如果发生异常,我们可以使用 TransactionRollback 方法撤销更改。这允许我们在出现问题的情况下将数据库恢复到原始状态。
例如,如果我们更加努力地学习如何使用 Joomla 提供的类,我们可以使我们的扩展独立于数据库引擎技术。
以下图表显示了 Joomla 在不同版本中支持的数据库。
通过关于“使用 Joomla 制作 Joomla”的这些初步介绍,我希望我们已经唤起了您的兴趣,以便您可以开始了解如何以更少的努力做更多的事情。
在 Joomla 社区杂志上发表的一些文章代表了作者对特定主题的个人观点或经验,可能不符合 Joomla 项目的官方立场。
通过接受,您将访问由 https://magazine.joomla.net.cn/ 外部的第三方提供的服务
评论