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