mysql查询中的表名语法错误

时间:2019-02-10 15:27:00

标签: php joomla query-builder

我无法使用php代码在Joomla文章中引用数据库视图。尽管我可以访问表,但无法引用视图。请注意,数据使用phpMyAdmin存储在MySQL中。以下是我的代码,其中视图名称是jos2_vw_member_contribution。

<?php 
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('Recipient','Target', 'Actuals'))));
$query->from($db->quoteName('jos2_vw_member_contribution'));
$query->setOrder('Recipient','ASC');
$db->setQuery($query);
$results = $db->loadObjectList();
?>

以上抛出错误 1146-表'。#__ vw_member_contribution'不存在。

感谢您对上述问题的早期帮助。另外,我强烈建议使用此线程来讨论视图与表用法的优缺点。

谢谢, Paippad。

1 个答案:

答案 0 :(得分:0)

根据Joomla's Coding Standards(标为: SQL查询),您不应在字面上命名表“前缀”,而应使用#__。 (尽管您的错误表明您正在使用#__。)

表名前面的那个讨厌的小.看起来很麻烦。您最好检查一下您的表名是否正确:PHP中的#__vw_member_contribution

->setOrder()将悄悄终止查询,因为它不是查询方法(资源:https://api.joomla.org/cms-3/classes/JDatabaseQuery.html),您应该使用order()

建议的未经测试的代码段,带有诊断和错误捕获功能:

$db = JFactory::getDbo();
$query = $db->getQuery(true)
    ->select($db->quoteName(array('Recipient','Target','Actuals')))
    ->from($db->quoteName('#__vw_member_contribution'))
    ->order($db->quoteName('Recipient'));  // ASC is the default direction

JFactory::getApplication()->enqueueMessage("<div>Rendered Select Query:<br>" . $query->dump() . "</div>", 'notice');  // don't show to public

try
{
    $db->setQuery($query);
    if (!$results = $db->loadObjectList())  // declare and check $result
    {
        echo "No matches found";
    }
    else
    {
        // do your thing with $result
    }
}
catch (Exception $e)
{
    JFactory::getApplication()->enqueueMessage("Query Syntax Error: " . $e->getMessage(), 'error');  // don't show to the public
}

p.s。遇到Joomla问题时,请将其发布在Joomla Stack Exchange上,以从具有Joomla专门知识的志愿者那里获得宝贵的反馈意见。