官方系列教材 - G计划

Joomla开发手册

Joomla提供两种方式来插入记录,一种是SQL,一种是对象的方法

使用SQL插入记录


JDatabaseQuery类提供了一些方法来方便构建插入的SQL查询语句,其中最常用的就是insert ,columns,values.典型的使用代码如下:

// 得到数据库链接对象
$db = JFactory::getDbo();

// 创建一个查询对象
$query = $db->getQuery(true);

// 准备插入的行
$columns = array('user_id', 'profile_key', 'profile_value', 'ordering');

// 准备需要插入的值
$values = array(1001, $db->quote('zmax99.com'), $db->quote('Inserting a record using insert()'), 1);

// 构建插入的查询语句.
$query
    ->insert($db->quoteName('#__zmax_user'))
    ->columns($db->quoteName($columns))
    ->values(implode(',', $values));

// 设置查询并且执行.
$db->setQuery($query);
$db->execute();

在上面的代码中使用了 quotename()方法 ,这个方法的作用是添加引号。在书写查询语句的时候,在表名或者字段名上加上引号,可以避免和数据库的保留字冲突。

获得插入记录的ID


当插入完成后,通过调用insertid方法获得插入的ID.代码如下:

// 得到刚刚插入记录的ID
$new_row_id = $db->insertid();

如何存储空值为NULL


如果字段的默认值为NULL,那么你在插入的时候就不要设置这个字段名,让数据库系统字段给他赋值NULL.如果你的字段默认值不是NULL,且该字段允许值为NULL,那么你需要明确的在代码中指定插入NULL.代码如下:

// 得到数据库链接对象
$db = JFactory::getDbo();

// 创建一个查询对象
$query = $db->getQuery(true);

// 准备插入的行
$columns = array('user_id', 'profile_key', 'profile_value', 'ordering');

// 准备需要插入的值
$values = array(1001, $db->quote('zmax99.com'),  $db->quote('NULL'), 1);

// 构建插入的查询语句.
$query
    ->insert($db->quoteName('#__zmax_user'))
    ->columns($db->quoteName($columns))
    ->values(implode(',', $values));

// 设置查询并且执行.
$db->setQuery($query);
$db->execute(); 

使用对象插入记录


JDatabaseDriver类提供了一个不需要写任何SQL语句就可以插入记录的方法。代码如下:

// 创建一个对象
$profile = new stdClass();
$profile->user_id = 1001;
$profile->profile_key='zmax;
$profile->profile_value='Inserting a record using insertObject()';
$profile->ordering=1;

// 插入对象到zmax_user表中.
$result = JFactory::getDbo()->insertObject('#__zmax_user', $profile);

注意,在上面并没有使用quoteName方法来给表名加上引号,这是因为 insertObject方法会自动的帮我们做这一操作。

在执行插入的过程中,如果出现错误,insertObject方法会抛出一个错误。如果你的数据表中设置了主键值,那么建议你在执行插入之前,先检查这个主键值是否存在,这样可以避免不必要的麻烦。

insertObject方法支持第三方个参数,这个参数为表的主键名。当你指定了这个参数后,在插入完成后,会更新对象,将主键值设置到对象上面去。可以使用这种方式获得插入的ID.

$result = $dbconnect->insertObject('#__my_table', $object, 'primary_key');

上面的代码执行完成后,$object->primary_key的值将被更新为插入记录的ID.

提示:在插入之前需要将$object->primary_key 设置为 null0

 当使用对象插入的时候如何存储NULL


如果字段的默认值为NULL,那么你的对象不加上这个属性就可以了,让数据库系统字段给他赋值NULL.如果你的字段默认值不是NULL,且该字段允许值为NULL,那么你需要明确的在代码中指定插入NULL.代码如下:

// 创建一个对象
$profile = new stdClass();
$profile->user_id = 1001;
$profile->profile_key='zmax;
$profile->profile_value = $db->quote('NULL');
$profile->ordering=1;

// 插入对象到zmax_user表中.
$result = JFactory::getDbo()->insertObject('#__zmax_user', $profile);

作者: 樱木花道

Joomla程序员,从J1.5到J4.x始终都在做Joomla相关开发定制工作,有超过10年行业经验,国内Joomla扩展开发商ZMAX团队的核心成员

作者网站:ZMAX程序人

评论 (0)

  • 最新在前
  • 最佳在前

第3章 处理URL请求参数

第5章 日志

第6章 错误和调试

第10章 缓存

第14章 路由系统