php mysql基于IF语句向数组添加值

php mysql基于IF语句向数组添加值,php,mysql,joomla,Php,Mysql,Joomla,使用Joomla时,在尝试基于URL参数构建mySQL查询时遇到问题。我的代码如下所示: $db =& JFactory::getDBO(); $hpprice = JRequest::getVar('hprice'); $lprice = JRequest::getVar('lprice'); $city = JRequest::getVar('city'); $zip = JRequest::getVar('zip'); $bdrms

使用Joomla时,在尝试基于URL参数构建mySQL查询时遇到问题。我的代码如下所示:

    $db =& JFactory::getDBO();
    $hpprice = JRequest::getVar('hprice');
    $lprice = JRequest::getVar('lprice');
    $city = JRequest::getVar('city');
    $zip = JRequest::getVar('zip');
    $bdrms = JRequest::getVar('bdrms');
    $bths = JRequest::getVar('bths');

    $query = "SELECT * FROM " . $db->nameQuote('#__mls') . " WHERE 1=1";
    $clauses = array();
    if ($zip != null) {
        $clauses[] = $db->nameQuote('MSTZIP') . " = " . $db->quote($zip);
    }
    if ($city != null) {
        $clauses[] = $db->nameQuote('MSTCITY') . " = '" . $db->quote($city) . "'";
    }
    if ($bdrms != null){
        $clauses[] = $db->nameQuote('MSTBDRMS')." >= ".$db->quote($bdrms);
    }
    if ($bths != null){
        $clauses[] = $db->nameQuote('MSTBATHS') . " >= " . $db->quote($bths);
    }
    if ($lprice != null){
        $clauses[] = $db->nameQuote('MSTLISTPRC') . " BETWEEN " . $db->quote($lprice) . " AND " . $db->quote($hprice);
    } 

    $query .= implode(" AND ", $clauses);

    $db->setQuery($query);
    $table = $db->loadRowList();
    return $table;
    $db =& JFactory::getDBO();
    $hprice = JRequest::getVar('hprice');
    $lprice = JRequest::getVar('lprice');
    $city = JRequest::getVar('city');
    $zip = JRequest::getVar('zip');
    $bdrms = JRequest::getVar('bdrms');
    $bths = JRequest::getVar('bths');

    $query = "SELECT * FROM " . $db->nameQuote('#__mls') . " WHERE 1=1 AND ";
    $clauses = array();
    if ($zip != null) {
        $clauses[] = "MSTZIP = " . $zip;
    }
    if ($city != null) {
        $clauses[] = "MSTCITY = " . $db->quote($city);
    }
    if ($bdrms != null){
        $clauses[] = "MSTBDRMS >= " . $bdrms;
    }
    if ($bths != null){
        $clauses[] = "MSTBATHS >= " . $bths;
    }
    if ($lprice != null){
        $clauses[] = "MSTLISTPRC BETWEEN " . $lprice . " AND " . $hprice;
    } 

    $query .= implode(" AND ", $clauses) . ";";

    $db->setQuery($query);
    $table = $db->loadRowList();
    return $table;
因此,正如您所看到的,根据URL中是否存在Aruments,将参数添加到mySQL查询中。我无法理解的是构建阵列并使其内爆


每当我在URL中放入参数时,所有表项都会填充。当我试图传递一个参数时,结果是空的。你可以在行动中看到这一点。如果在URL中添加另一个参数,如zip,则所有参数都为空。

我认为问题在于这里1=1。尝试将其更改为-WHERE 1=1。 因为最终的查询将附加到此查询之后,您将无法获得所需的结果。为了确认,请同时echo$query查看它是否是正确的查询。还有一件事是'$db->报价$city'。删除,因为您已经通过一个函数添加了它

//更新:

更好的使用方法


如果这不起作用,请告诉我。

不确定这与您之前的问题有什么不同

$query->select'*; $query->from$db->nameQuote''uuu mls'

 $query->where('1 = 1', AND);
if ($zip != null)
{
  $query->where (.$db->nameQuote('MSTZIP')." = ".$db->quote($zip)); 
}
if ($city != null) 
{ 
   $query->where($db->nameQuote('MSTCITY')." = '".$db->quote($city)); 
} 

Etc

您无需构建任何阵列;这就是拥有databasequery api的全部意义。

最终脚本的外观如下:

    $db =& JFactory::getDBO();
    $hpprice = JRequest::getVar('hprice');
    $lprice = JRequest::getVar('lprice');
    $city = JRequest::getVar('city');
    $zip = JRequest::getVar('zip');
    $bdrms = JRequest::getVar('bdrms');
    $bths = JRequest::getVar('bths');

    $query = "SELECT * FROM " . $db->nameQuote('#__mls') . " WHERE 1=1";
    $clauses = array();
    if ($zip != null) {
        $clauses[] = $db->nameQuote('MSTZIP') . " = " . $db->quote($zip);
    }
    if ($city != null) {
        $clauses[] = $db->nameQuote('MSTCITY') . " = '" . $db->quote($city) . "'";
    }
    if ($bdrms != null){
        $clauses[] = $db->nameQuote('MSTBDRMS')." >= ".$db->quote($bdrms);
    }
    if ($bths != null){
        $clauses[] = $db->nameQuote('MSTBATHS') . " >= " . $db->quote($bths);
    }
    if ($lprice != null){
        $clauses[] = $db->nameQuote('MSTLISTPRC') . " BETWEEN " . $db->quote($lprice) . " AND " . $db->quote($hprice);
    } 

    $query .= implode(" AND ", $clauses);

    $db->setQuery($query);
    $table = $db->loadRowList();
    return $table;
    $db =& JFactory::getDBO();
    $hprice = JRequest::getVar('hprice');
    $lprice = JRequest::getVar('lprice');
    $city = JRequest::getVar('city');
    $zip = JRequest::getVar('zip');
    $bdrms = JRequest::getVar('bdrms');
    $bths = JRequest::getVar('bths');

    $query = "SELECT * FROM " . $db->nameQuote('#__mls') . " WHERE 1=1 AND ";
    $clauses = array();
    if ($zip != null) {
        $clauses[] = "MSTZIP = " . $zip;
    }
    if ($city != null) {
        $clauses[] = "MSTCITY = " . $db->quote($city);
    }
    if ($bdrms != null){
        $clauses[] = "MSTBDRMS >= " . $bdrms;
    }
    if ($bths != null){
        $clauses[] = "MSTBATHS >= " . $bths;
    }
    if ($lprice != null){
        $clauses[] = "MSTLISTPRC BETWEEN " . $lprice . " AND " . $hprice;
    } 

    $query .= implode(" AND ", $clauses) . ";";

    $db->setQuery($query);
    $table = $db->loadRowList();
    return $table;

我最终摆脱了nameQuote和quote,除非需要/适用。我使用的脚本模型来自某个教程。它为我以前所做的工作起了作用,但由于某些原因,现在不行了。最后一步是确定初始值和条件值,但这不需要花费太多时间。至少现在已经有了框架。感谢所有帮助您的人。

您在尝试执行之前是否检查了生成的查询,例如echo$query;?您只需假设此代码正确构建查询。$query。='和'。内爆…我刚刚在原始$query语句的末尾添加了and。我猜名字引号就是添加引号的地方。还有其他函数可以用来提取这些信息吗?这应该不是问题,它只会在字段名周围添加反勾号。用最终查询文本更新问题,无法从注释中看到,因为它们会弄乱背景标记;在查询语句的末尾@马克B,你是故意的,不是吗;使用了不同的解决方案。谢谢你。