我刚刚开始学习joomla (3.x),并安装了带有视图和模型的示例组件的一部分(参考http://docs.joomla.org/J3.3:Developing_a_MVC_Component/Adding_a_model_to_the_site_part)。
当我添加一些数据库代码到模型-见下文-我得到了错误消息:
The requested page cannot be found.
An error has occurred while processing your request.
#0 SQL=SELECT username FROM '#__users' WHERE id='391'
我假设我的查询是错误的(我故意使用字符串而不是对象的查询),但我不明白是什么错了?(ps:我检查了表与__users以及表字段id和用户名存在。
相关代码(模型部分):
// Get a db connection.
$db = JFactory::getDbo();
// Create a new query
//$query = $db->getQuery(true); //Option A: Create a new query object
$query = "SELECT username FROM '#__users' WHERE id='391' "; //Option B (classic method): SQL query string
$db->setQuery($query);
//Execute query
$db->execute();
//Get single DB result
//if($result)
$this->msg = 'Hello '.$db->loadResult();
您应该为您的查询坚持Joomla编码标准,如下所示:
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName('username'))
->from($db->quoteName('#__users'))
->where($db->quoteName('id') . ' = ' . (int) 391));
$db->setQuery($query);
$result = $db->loadResult();
但是,如果您试图获得具有特定ID的s用户的用户名,那么您可以简单地使用以下命令:
$user = JFactory::getUser(391);
$this->msg = 'Hello '. $user->get('username');
问题是你引用的表名,当反引号(最多)应该使用。只有当表名与保留的mysql名共享时,才需要使用反引号。
"SELECT username FROM `#__users` WHERE id=391 "
注:INT值不需要封装