getQuery(true)vs stdClass类数据行插入 - Joomla

时间:2012-10-24 05:16:54

标签: php mysql joomla joomla2.5 joomla1.7

方法1

  global $database;
  $user = new stdClass;
  $user->id = NULL;
  $user->name = $name;
  $user->username = $username;

  if (!$database->insertObject( '#__users', $user, 'id' )) {
    echo $database->stderr();
    return false;
  }

  return $user->id;

方法2

  $db = JFactory::getDBO();     
  $query = $db->getQuery(true);
  $query->insert($db->nameQuote('#__users'));
  $query->set($db->nameQuote('name').'='.$db->quote($$name).','.
  $db->nameQuote('username').'='.$db->quote($username));     
  $db->setQuery( $query );
  $db->query();
  $new_id = $db->insertId();

我正在使用Joomla并使用上述两个查询,这让我可以完成工作。我的问题是方法1和方法2有什么区别?什么是行业标准?我应该使用上述方法的具体情况吗?哪一个更好,为什么?

由于

1 个答案:

答案 0 :(得分:2)

方法1 (M1)和方法2 (M2)都是有效的Joomla! 2.5机制,M1使用半自动方法,并且在您已经使用对象的地方可能更常用。

M2显然是一组更具体的步骤,但两者都适用于JDatabase等提供的抽象。人。将您与数据库服务器隔离开来。

话虽如此,M1仅用于整个Joomla的几个地方(字面意思)! 2.5广泛使用M2时安装(不计算/libararies/joomla/database/

唯一奇怪的是在M1中使用global,通常Joomla! coding standards避免使用全局变量而不是使用OOP或工厂模式。所以,像这样:

$database = JFactory::getDBO();

而不是使用global引用。