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 设置为 null 或 0
当使用对象插入的时候如何存储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);