在MySQL查询的表名语法错误

问题描述 投票:0回答:1

我无法使用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。

php joomla query-builder
1个回答
0
投票

按照Joomla's Coding Standards(节标:SQL查询),你不应该从字面上命名表“前缀”,你应该使用#__。 (虽然你的错误表明您正在使用#__。)

在你的表名前面那个讨厌的小.看起来麻烦。你最好检查你的表名恰恰是:#__vw_member_contribution在你的PHP。

->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
}

附:当你的Joomla问题,请在发布Joomla Stack Exchange他们从与Joomla贴心专业知识的志愿者收到有价值的反馈。

© www.soinside.com 2019 - 2024. All rights reserved.