【问题标题】:getQuery(true) vs stdClass Class data row insertion - JoomlagetQuery(true) 与 stdClass 类数据行插入 - Joomla
【发布时间】:2012-10-24 05:16:53
【问题描述】:

方法一

  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;

方法二

  $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有什么区别?行业标准是什么?有什么具体情况我应该使用上述方法吗?哪个更好,为什么?

谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    话虽如此,M1 仅在整个 Joomla 中的几个地方(字面意思)使用! 2.5安装(不包括/libararies/joomla/database/)而M2被广泛使用

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

    $database = JFactory::getDBO();
    

    而不是使用global 引用。

    【讨论】:

      猜你喜欢
      • 2012-09-27
      • 1970-01-01
      • 2013-09-11
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多