我刚刚开始学习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的表以及tablefields id和username。
相关代码(模型部分):
// 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();
答案 0 :(得分:0)
问题是你引用表名,应该使用反引号(最多)。实际上只需要在表名与保留的mysql名称共享的情况下使用反引号。
"SELECT username FROM `#__users` WHERE id=391 "
旁注,INT值不需要封装。
答案 1 :(得分:0)
您应该坚持使用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的用户的用户名,那么您只需使用以下内容:
$user = JFactory::getUser(391);
$this->msg = 'Hello '. $user->get('username');