Php foreach循环中的Joomla Mysql查询

Php foreach循环中的Joomla Mysql查询,php,mysql,sql,joomla,Php,Mysql,Sql,Joomla,我试图用php和mysql在Joomla2.5中构建一个简单的选择列表,但我遇到了一个问题:它没有加载选项名。。。有什么错误吗 <?php $db = JFactory::getDBO(); $query = $db->getQuery(true); $query->select('optValue'); $query->from('#__sobipro_field_option'); $query->where("fid='38'"); $db->setQu

我试图用php和mysql在Joomla2.5中构建一个简单的选择列表,但我遇到了一个问题:它没有加载选项名。。。有什么错误吗

<?php
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('optValue');
$query->from('#__sobipro_field_option');
$query->where("fid='38'");
$db->setQuery((string)$query);
$results = $db->loadObjectList();
if ($results){
echo "<select>";
 foreach($results as $result){
    foreach($result as $value) {
    $query->select('sValue');
    $query->from('#__sobipro_language');
    $query->where("fid='38' and language='it-IT' and sKey='".$value."'");
    $db->setQuery((string)$query);
    $name = $db->loadResult();
    echo "<option value=\"$value\">".$name."</option>";
    }
    }

    echo "</select>";
}
else {
echo 'Error';
}
?>

每当您尝试调试Joomla时!代码打开调试模式(
Global Configuration->System->debug Settings
)并将错误报告设置为
Development
Global Configuration->Server->Error Reporting
),这样您就可以立即看到问题

  • $query
    实际上是一个类型为
    JDatabaseQuery
    的对象,应该像在
    $db->setQuery($query)
    调用中一样使用,而不强制转换为
    (字符串)

  • 当引用数据库、表或列名时,最好使用Joomla的机制包装名称,即正确的引号,例如
    $query select($db->quoteName('optValue'))

    除其他事项外,这将确保SQL关键字不会成为问题

  • 同样,对于值,使用Joomla!提供了
    $db->quote()
    方法。e、 g.
    $query->where($db->quoteName('fid')。='.$db->quote('38')

  • 当构建一个带有多个值的
    WHERE
    查询时,您只需将每个项添加为自己的
    ->WHERE()
    子句即可

  • 所以你之前的位置我倾向于这样写:

    $query->where($db->quoteName('fid')。='.$db->quote('38');
    $query->where($db->quoteName('language')。='。$db->quote('it-it');
    $query->where($db->quoteName('sKey')。='.$db->quote($value));
    
    最后,正如您所说的,两个
    $查询都是自己工作的,但是如果将它们放在代码中(如图所示),它们就不能工作了

    原因是,在为第一条语句配置
    $query
    并运行它之后,您将继续将第二条语句添加到原始
    $query
    对象中。因此,当您执行第二个、第三个etc
    setQuery($query)
    时,SQL变得越来越长,不太可能返回任何结果

    由于没有在最内部的
    foreach
    循环中测试每个
    $db->loadResult()
    是否成功,因此您永远看不到错误

    至少您需要在内部循环的开头添加一个新的
    $db->getQuery(true)
    ,如下所示:


    每当您尝试调试Joomla时!代码打开调试模式(
    Global Configuration->System->debug Settings
    )并将错误报告设置为
    Development
    Global Configuration->Server->Error Reporting
    ),这样您就可以立即看到问题

  • $query
    实际上是一个类型为
    JDatabaseQuery
    的对象,应该像在
    $db->setQuery($query)
    调用中一样使用,而不强制转换为
    (字符串)

  • 当引用数据库、表或列名时,最好使用Joomla的机制包装名称,即正确的引号,例如
    $query select($db->quoteName('optValue'))

    除其他事项外,这将确保SQL关键字不会成为问题

  • 同样,对于值,使用Joomla!提供了
    $db->quote()
    方法。e、 g.
    $query->where($db->quoteName('fid')。='.$db->quote('38')

  • 当构建一个带有多个值的
    WHERE
    查询时,您只需将每个项添加为自己的
    ->WHERE()
    子句即可

  • 所以你之前的位置我倾向于这样写:

    $query->where($db->quoteName('fid')。='.$db->quote('38');
    $query->where($db->quoteName('language')。='。$db->quote('it-it');
    $query->where($db->quoteName('sKey')。='.$db->quote($value));
    
    最后,正如您所说的,两个
    $查询都是自己工作的,但是如果将它们放在代码中(如图所示),它们就不能工作了

    原因是,在为第一条语句配置
    $query
    并运行它之后,您将继续将第二条语句添加到原始
    $query
    对象中。因此,当您执行第二个、第三个etc
    setQuery($query)
    时,SQL变得越来越长,不太可能返回任何结果

    由于没有在最内部的
    foreach
    循环中测试每个
    $db->loadResult()
    是否成功,因此您永远看不到错误

    至少您需要在内部循环的开头添加一个新的
    $db->getQuery(true)
    ,如下所示:


    您是否从查询中得到任何错误?我肯定会首先考虑重建查询,因为对于得到的每个结果,您正在运行另一个查询。我不明白您的意思。我不接受任何错误,这两个查询单独工作很好,但是组合检索一个带有空白选项的选择列表…您从查询中得到任何错误吗?我肯定会首先考虑重建查询,因为对于得到的每个结果,您正在运行另一个查询。我不明白您的意思。我不接受任何错误,这两个查询单独工作很好,但组合检索带有空白选项的选择列表…哦,耶!它就像一个魅力!!!当你建议我重组这个脚本时,我同意你的意见,但现在我将使用它。我刚开始使用php和mysql,所以这是目前我能写的最好的解决方案。非常感谢你!哦,是的!它就像一个魅力!!!当你建议我重组这个脚本时,我同意你的意见,但现在我将使用它。我刚开始使用php和mysql,所以这是目前我能写的最好的解决方案。非常感谢你!