Php foreach循环中的Joomla Mysql查询
我试图用php和mysql在Joomla2.5中构建一个简单的选择列表,但我遇到了一个问题:它没有加载选项名。。。有什么错误吗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
$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
对象中。因此,当您执行第二个、第三个etcsetQuery($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
对象中。因此,当您执行第二个、第三个etcsetQuery($query)
时,SQL变得越来越长,不太可能返回任何结果
由于没有在最内部的foreach
循环中测试每个$db->loadResult()
是否成功,因此您永远看不到错误
至少您需要在内部循环的开头添加一个新的$db->getQuery(true)
,如下所示:
您是否从查询中得到任何错误?我肯定会首先考虑重建查询,因为对于得到的每个结果,您正在运行另一个查询。我不明白您的意思。我不接受任何错误,这两个查询单独工作很好,但是组合检索一个带有空白选项的选择列表…您从查询中得到任何错误吗?我肯定会首先考虑重建查询,因为对于得到的每个结果,您正在运行另一个查询。我不明白您的意思。我不接受任何错误,这两个查询单独工作很好,但组合检索带有空白选项的选择列表…哦,耶!它就像一个魅力!!!当你建议我重组这个脚本时,我同意你的意见,但现在我将使用它。我刚开始使用php和mysql,所以这是目前我能写的最好的解决方案。非常感谢你!哦,是的!它就像一个魅力!!!当你建议我重组这个脚本时,我同意你的意见,但现在我将使用它。我刚开始使用php和mysql,所以这是目前我能写的最好的解决方案。非常感谢你!