Joomla 更新记录
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方法失败将会抛出一个错误。因此,在更新之前,最好能够检查一下这个记录是否存在。