阅读(2388) (1)

Joomla 更新记录

2023-03-10 11:21:49 更新

Joomla更新记录的方法

使用SQL

JDatebaseQuery对象提供了update().set()这两个方法来构建更新SQL语句。通用可以使用where()来指定条件。典型的代码如下:

$db = JFactory::getDbo();
$query =$db->getQuery(true);
$query->update($db->quoteName('#__zmax_user'))->set("state=1")->where("id=99");
$db->setQuery($query);
$result =$db->execute(); 

这里的set,where方法也支持数组,可以同时设置多个字段。代码如下:

$db = JFactory::getDbo();
$query =$db->getQuery(true);
 
// 需要更新的字段
$fields =array(
    $db->quoteName('intro') .' = ' .$db->quote('my nam is zhangmin.'),
    $db->quoteName('ordering') .' = 2',
    // 设置null值得方法
    $db->quoteName('avatar') .' = NULL',
);
 
// 更新的条件
$conditions =array(
    $db->quoteName('user_id') .' = 42',
    $db->quoteName('name') .' = ' .$db->quote('zmax99')
);
$query->update($db->quoteName('#__zmaxuser'))->set($fields)->where($conditions);
 
$db->setQuery($query);
$result =$db->execute();

使用对象来更新记录

JDatabaseDriver类提供了updateObject方法来更新一条记录。

$updateNulls = true;//是否更新NULL值
 
// 创建一个对象,这个对象的字段必须和需要更新数据表的字段一致,可以少,但不能多
$object =new stdClass();
 
$object->id = 1;// 需要更多数据表的主键
$object->title ='My Custom Record';
$object->description ='A custom record being updated in the database.';
 
// 如果需要设置NULL,需要明确在值中指定.
$object->short_description = null;
$result = JFactory::getDbo()->updateObject('#__zmaxuser',$object,'id',$updateNulls);

和insertObject一样,updateObject方法也会自己给数据表加上引号。执行updateobject方法失败将会抛出一个错误。因此,在更新之前,最好能够检查一下这个记录是否存在。