Joomla技术支持——如何插入、更新和删除数据使用JDatabase

本教程分为两个独立的部分:   

  • 从数据库中插入、更新和删除数据。   
  • 选择从一个或多个表的数据和检索它以各种不同的形式。  

看着这部分的文档插入、更新和删除数据从一个数据库表中          

Joomla提供了一个复杂的数据库抽象层简化为第三方开发人员使用。Joomla的新版本平台API提供额外的功能进一步扩展了数据库层,和包括功能连接器等更多种类的数据库服务器和连接代码的查询链接来改善可读性和简化SQL编码。

Joomla可以使用不同类型的SQL数据库系统和运行在不同的环境中与不同的表前缀。除了这些功能之外,类自动创建数据库连接。除了您只需要两行代码实例化对象从数据库得到的结果在各种格式。使用Joomla数据库层确保了最大的兼容性和灵活性为你扩展。

查询   

Joomla的数据库查询已经改变了自新的Joomla框架介绍了“查询链接”现在的推荐方法建立数据库查询(尽管仍然支持字符串查询)。   

查询链接指的方法连接的方法,一个接一个,每个方法返回一个对象,可以支持下一个方法,改善可读性和简化代码。   

获得JDatabaseQuery类的一个新实例我们使用JDatabaseDriver getQuery方法:

$db = JFactory::getDbo();
$query = $db->getQuery(true)
;

JDatabaseDriver::getQuery接受一个可选参数,新美元,可真或假(默认是错误的)。   

查询我们的数据源可以调用一些JDatabaseQuery方法;这些方法封装了数据源的查询语言(SQL)在大多数情况下,向开发人员隐藏query-specific语法和提高开发人员的源代码的可移植性。   

一些比较常用的方法包括:选择、从加入,和秩序。也有方法如插入、更新和删除修改记录的数据存储。通过链接这些和其他方法调用,您可以创建几乎任何查询你的数据存储在不影响代码的可移植性。

插入一个记录   

使用SQL   

JDatabaseQuery类提供了许多方法来构建插入查询,最常见的被插入,列和价值观

 // Get a db connection.
$db = JFactory::getDbo();
// Create a new query object.
$query = $db->getQuery(true);
// Insert columns.
$columns = array('user_id', 'profile_key', 'profile_value', 'ordering');
// Insert values.
$values = array(1001, $db->quote('custom.message'), $db->quote('Inserting a record using insert()'), 1);
// Prepare the insert query.
$query
    ->insert($db->quoteName('#__user_profiles'))
    ->columns($db->quoteName($columns))
    ->values(implode(',', $values))
// Set the query using our newly populated query object and execute it.
$db->setQuery($query);
$db->execute();

使用对象   

JDatabaseDriver类还提供了一个方便的方法为直接对象保存到数据库允许我们添加一个记录表格,无需编写一行SQL。

注意,我们不需要逃避的表名;insertObject方法为我们做这个。   

insertObject方法会抛出一个错误如果有问题将记录插入到数据库表中。   

我们需要确保记录不存在之前插入,所以添加一些记录检查之前执行insertObject方法将推荐。

更新记录  

使用SQL   

JDatabaseQuery类还提供了方法来构建更新查询,尤其是更新和设置。我们还重用我们用另一种方法在创建select语句时,在方法。

$db = JFactory::getDbo();
$query = $db->getQuery(true);
// Fields to update.
$fields = array(
    $db->quoteName('profile_value') . ' = ' . $db->quote('Updating custom message for user 1001.'),
    $db->quoteName('ordering') . ' = 2'
);
// Conditions for which records should be updated.
$conditions = array(
    $db->quoteName('user_id') . ' = 42', 
    $db->quoteName('profile_key') . ' = ' . $db->quote('custom.message')
);
$query->update($db->quoteName('#__user_profiles'))->set($fields)->where($conditions);
$db->setQuery($query);
$result = $db->execute();

使用对象   

像insertObject JDatabaseDriver类提供了一种便利方法更新一个对象。   

下面我们将与新值更新我们的自定义表使用现有的id主键:

// Create an object for the record we are going to update.
$object = new stdClass();
// Must be a valid primary key value.
$object->id = 1;
$object->title = 'My Custom Record';
$object->description = 'A custom record being updated in the database.';
// Update their details in the users table using id as the primary key.
$result = JFactory::getDbo()->updateObject('#__custom_table', $object,
 'id');

就像insertObject,updateObject负责为我们逃离表名。   

updateObject方法会抛出一个错误如果有问题更新记录到数据库表中。   

我们需要确保记录已经存在在试图更新之前,我们可能会添加一些记录检查之前执行updateObject方法。

删除一个记录   

最后,还有一个delete方法从数据库删除记录。

Finally, there is also a delete method to remove records from the database.

$db = JFactory::getDbo();
$query = $db->getQuery(true);
// delete all custom keys for user 1001.
$conditions = array(
    $db->quoteName('user_id') . ' = 1001', 
    $db->quoteName('profile_key') . ' = ' . $db->quote('custom.%')
);
$query->delete($db->quoteName('#__user_profiles'));
$query->where($conditions);
$db->setQuery($query);
$result = $db->execute();