2014-02-25 83 views
0

我试图执行查询但不断收到错误致命错误:调用非对象上的成员函数fetch_assoc()。我已经通过论坛寻找答案,但我很新的PHP和我发现很多东西是非常先进的让我的头。我正在与Joomla合作,与数据库的连接正在工作,我可以成功写入我正在使用的表格,但无法从中选择信息而不会收到此错误。致命错误:调用非对象上的成员函数fetch_assoc() -

<?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>'; 
          } 
         } 
        } 
       ?> 
+0

工作,这是否查询:当你在phpMyAdmin运行或任何'SELECT * FROM jos_offer'工作? – anthonygore

+0

是的查询适用于phpMyAdmin – user1851954

+0

这里没有足够的信息。请出示[testcase](http://sscce.org)。 –

回答

0

而($行= $ result-> 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

+0

什么?不,您从结果中获取。 'query'给你一个结果集资源。假设这是mysqli。 –

+0

没有。这就是_old_数据库包装函数用于工作的方式http://php.net/manual/en/mysqli-result.fetch-assoc.php – Halcyon

+0

由于它像__数据库对象一样具有所有的获取函数(称为'load'显然)我仍然认为我是正确的。 http://docs.joomla.org/API15:JDatabase我认为'loadResultArray'是最类似于'fetch_assoc'的函数? – Halcyon

1

如果你在你的Joomla应该采取的API的功能,让你的代码清晰,更简单。

$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>'; 
    } 
} 
0

感谢您的帮助,我得到了它的使用

$db->setQuery($query); 
if($rows = $db->loadObjectList()) 
相关问题