Php 致命错误:对非对象调用成员函数fetch_assoc()-
我正在尝试执行一个查询,但一直收到一个错误致命错误:对非对象调用成员函数fetch_assoc。我在论坛上搜索过答案,但我对php非常陌生,我发现的很多东西对我来说都是非常先进的。我正在与Joomla一起工作,与数据库的连接正在工作,我可以成功地写入我正在使用的表,但如果不出现此错误,则无法从中选择信息Php 致命错误:对非对象调用成员函数fetch_assoc()-,php,joomla,mysqli,Php,Joomla,Mysqli,我正在尝试执行一个查询,但一直收到一个错误致命错误:对非对象调用成员函数fetch_assoc。我在论坛上搜索过答案,但我对php非常陌生,我发现的很多东西对我来说都是非常先进的。我正在与Joomla一起工作,与数据库的连接正在工作,我可以成功地写入我正在使用的表,但如果不出现此错误,则无法从中选择信息 <?php $message = ''; $db = JFac
<?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>';
}
}
}
?>
而$row=$result->fetch\u assoc
应该是:
while($row = $db->loadResultArray($result))
$result不是您认为的对象。这是一个MySQLi_resultset_资源,除了将其传递给fetch_assoc之外,您无法使用它
除非您有Joomla数据库包装器的文档,否则我建议不要使用它。本机PHP包装即使不是更好,至少也一样好
查看MySQLi包装器:如果您在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>';
}
}
谢谢你的帮助,我用它工作了
$db->setQuery($query);
if( $rows = $db->loadObjectList() )
什么不,你从结果中提取。查询为您提供一个resultset资源。假设这是mysqli.Nope。这就是旧的数据库包装函数的工作方式,因为DB对象似乎拥有所有名为load的获取函数。显然,我仍然认为我是正确的。我认为loadResultArray是最类似于fetch_assoc的函数?@FritsvanCampen:你似乎很困惑。Mysqli不是旧的API,而且它大部分都有对象。这些都不能解释为什么您认为从DB资源而不是从查询操作获取的resultset资源获取行是可能的,甚至是有意义的。你认为$db->fetch\u assoc可能意味着什么,除非你使用的API严重损坏?@Frits:Yep,你是对的:在mysqli\u查询中是不同的。OO变量mysqli->query是面向对象的。但是,这些函数是同一个库的一部分,在这两种情况下,行都来自resultset here$result,而不是原始DB connection资源here$DB。这就是我的意思。尽管如此,我也不知道JFactory,因此我没有发布答案!。。。此查询:在phpMyAdmin或其他任何程序中运行时,选择*FROM jos_offer是否有效?是的,此查询在phpMyAdmin中有效此处信息不足。请出示一份表格。您是使用1.5还是当前代码库2.5/3?这是在CMS中还是在一个独立的应用程序中?为什么不使用Joomla api呢?还应始终使用_;而不是硬编码前缀。Joomla还有很多内置的错误处理功能,你不需要担心连接问题,除非你连接的数据库不是你的cms数据库,如果连接失效,你会在这一点之前知道方法。。