Joomla Jdatabase访问不起作用

时间:2014-05-13 19:57:48

标签: php sql joomla

我刚刚开始学习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();

2 个答案:

答案 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');