致命错误:在非对象上调用成员函数fetch_assoc() -

时间:2014-02-25 23:47:01

标签: php joomla mysqli

我正在尝试执行查询但仍然收到错误致命错误:在非对象上调用成员函数fetch_assoc()。我已经在论坛中搜索了答案,但我对php非常陌生,我找到的很多东西对我来说非常先进。我正在使用Joomla,与数据库的连接正在工作,我可以成功写入我正在使用的表,但无法从中选择信息而不会出现此错误。

<?php                       
                    $message = '';
                    $db = JFactory::getDBO();
                    if($db->connect_error)
                    {
                        //if error assign to message
                        $message = $db->connect_error;
                    }
                    else
                    {
                        $sql = 'SELECT * FROM jos_offer';
                        $result = $db->query($sql);
                        if($db->error)
                        {
                            $message = $db->error;
                        }
                        else
                        {
                            while($row = $result->fetch_assoc())
                            {
                                echo '<div>'.$row['student_id'].$row['offer'].'</div>'; 
                            }
                        }
                    }
                ?>  

3 个答案:

答案 0 :(得分:1)

如果您在Joomla,您应该利用APIS使您的代码更清晰,更简单。

$db = JFactory::getDBO();
$query = $db->getQuery(true)
      ->select('*')->from($db->quoteName('#__offer'));
$db->setQuery($query);
$results = $db->loadObjectList();
//$results = $db->loadAssocList(); // If you really want that, not sure why you would.
 if ($db->getErrorNum())
{
 echo JText::sprintf('JLIB_DATABASE_ERROR_FUNCTION_FAILED', 
            $db->getErrorNum(), $db->getErrorMsg()) . '<br />';

   return;
}

if (!empty($results))
(      
  foreach ($results as $result)
  {
     echo '<div>'.$result->student_id. ' ' ,  $result->offer . '</div>'; 
    // Or switch to the associative array version
    // echo '<div>'.$result['student_id']. ' ' . $result['offer'] . '</div>'; 
  }
}

答案 1 :(得分:0)

while($ row = $ result-&gt; fetch_assoc())

应该是:

while($row = $db->loadResultArray($result))

$result不是您认为的对象。这是一个MySQLi_resultset_resource,除了将其传递给fetch_assoc

之外你不能做很多事情。

除非您有Joomla数据库包装器的文档,否则我建议不要使用它。本机PHP包装器至少同样好,如果不是更好。

查看MySQLi包装器:http://php.net/manual/en/mysqli-result.fetch-assoc.php

答案 2 :(得分:0)

感谢您的帮助,我使用

开始工作
$db->setQuery($query);
if( $rows = $db->loadObjectList() )